REST(Representational State Transfer) 기반이란, 웹 서비스와 API(Application Programming Interface)를 설계하는 아키텍처 스타일로, REST의 주요 원칙은 다음과 같다.
REST API: 이는 REST(Representational State Transfer) 원칙을 따르는 API를 가리킨다. API가 완전히 REST 원칙을 준수하지 않아도 이 용어를 사용할 수 있다.
RESTful API: 이 용어는 REST 원칙을 더 충실하게 따르는 API를 의미한다. 즉, API가 엔드포인트와 자원을 의도된 데이터와 작업에 맞게 설계하고, HTTP 메소드(GET, POST, PUT, DELETE)를 적절히 활용하여 표준적인 방식으로 자원을 표현하는 API를 가리킨다.
API 엔드포인트는 직관적이고 RESTful한 방식으로 구성하는 게 중요하다. RESTful API는 자원(Resource)을 중심으로 설계된다. 자원은 URL로 표현되며, 각 자원에 대해 HTTP 메서드를 사용해 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
엔드포인트를 설계할 때는 다음과 같은 요소를 고려해야 한다.
GET
은 데이터를 가져오고, POST
는 데이터를 생성하며, PUT
은 데이터를 업데이트하고, DELETE
는 데이터를 삭제한다.리소스는 복수형 명사
리소스는 복수형 명사로 작성한다. 예를 들어, users, orders, products 등과 같이 작성한다.
예시:
GET /users → 모든 사용자 조회
POST /orders → 주문 생성
자원의 고유 ID는 URL에 포함
특정 자원에 접근할 때는 해당 자원의 고유 ID를 URL에 포함한다.
예시:
GET /users/123 → ID가 123인 사용자 조회
PUT /products/45 → ID가 45인 상품 수정
계층적 관계 표현
자원 간의 계층적 관계가 있을 경우 URL에 중첩해 표현한다. 자원 내의 하위 자원을 나타낼 때 유용하다.
예시:
GET /users/123/orders → ID가 123인 사용자의 주문 목록 조회
POST /users/123/orders → ID가 123인 사용자에게 주문 생성
HTTP 메서드를 활용한 동작 정의
HTTP 메서드(GET, POST, PUT, DELETE)를 통해 동작을 정의하므로, URL에는 동작을 나타내는 동사를 포함하지 않는다.
GET → 조회 (Read)
POST → 생성 (Create)
PUT 또는 PATCH → 수정 (Update)
DELETE → 삭제 (Delete)
예시:
DELETE /users/123 → ID가 123인 사용자 삭제
PUT /products/45 → ID가 45인 상품 정보 수정
URL에는 소문자만 사용
URL은 소문자만 사용하고, 단어는 하이픈(-)으로 구분한다. 대소문자 혼합은 일관성을 해칠 수 있다.
예시:
/user-profiles/123 (O)
/UserProfiles/123 (X)
필터링, 정렬, 페이징은 쿼리 파라미터로
필터링, 정렬, 페이징과 같은 추가 조건은 URL 경로 대신 쿼리 파라미터를 사용하여 표현한다.
예시:
GET /products?category=books&sort=price_asc&page=2 → 책 카테고리의 제품을 가격 오름차순으로 정렬하고, 2페이지 결과 조회
액션은 경로가 아닌 쿼리 파라미터로 표현
일반적인 CRUD 작업이 아닌 특별한 동작이 필요한 경우, URL 경로 대신 쿼리 파라미터나 추가 경로로 표시한다.
예시:
POST /users/123/activate → ID가 123인 사용자를 활성화
POST /orders/45/cancel → 주문을 취소
경로 마지막에 '/'를 넣지 않는다.
향후에는 API문서화와 테스트를 자동화하여 관리하고 싶어서 Apidog와 같은 툴을 이용해볼까 한다.
Apidog의 REST API URL 모범 사례