REST(REpresentational State Transfer)란 웹에 존재하는 모든 자원(resource, ex. 이미지, 동영상, 데이터)에 고유한 URI를 부여하여 자원에 대한 주소를 지정하는 방법론, 또는 규칙이다. API 시스템을 구현하기 위한 아키텍처(Graphql, SOAP, GRPC, REST, ...) 중에 현재 가장 널리 사용되고 있다.
쉽게 말하면 http의 url과 http method(GET, POST, PUT, DELETE)를 사용해서 API 가독성을 높인 구조화된 시스템 아키텍쳐(framework)이다.
RESTful API는 REST 특징을 지키면서 API를 제공한다는 의미다. 즉, 프론트엔드에서 백엔드 API를 호출할 url을 어떻게 만들것인지를 생각하는 것이다.
URI/HTTP Method/Payload
https://finance.naver.com/login
URI 정보를 명확하게 표현해야 한다.
ex) /detail_page (X) -> /product (O)
ex) /main_page (X) -> /products (O)
URI은 page기준이 아닌 resource 기준으로 작성한다.
resource는 명사를 사용한다.
ex) GET user/1 -> GET users/1
resource에 대한 행위를 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
ex) GET delete/user/1 -> DELETE/users/1
ex) GET user/show/1 -> GET users/1
ex) POST user/add/product -> GET users/product
resource 사이에 연관 관계가 있는 경우: /리소스/고유ID/관계 있는 리소스
ex) GET/users/{user_id}/profile
파일의 경우 payload의 포맷을 나타내기 위한 파일 확장자를 URI를 포함시키지 않는다.
ex) GET user/1/profile-photo.jpg (X)
ex) GET user/1/profile-photo (이 때 payload의 포맷은 headers에 accept를 한다
URI는 /
구분자를 사용하여 자원의 계층 관계를 나타내는데 사용한다.
ex) POST /product_reviews (X) -> products/1/reviews (O)
ex) POST /product_filter (X) -> /product?name= (O)
URI 마지막 문자로 /
를 포함하지 않는다.
불가피하게 URI가 길어지는 경우 -
을 사용하여 가독성을 높인다(띄어쓰기 _
는 모호하다).
_
는 사용하지 않는다.
URI 경로에는 대문자 사용을 피하도록 규정하고 있다.
해당 리소스에 더 자세한 정보를 얻기 위해 접근할 때 사용한다.
웹 페이지의 url 주소를 자세히 보면 종종 ? 가 포함되어 있는데, 이 물음표 뒤에는 늘 key=value 형식의 문자열이 따라온다. 이를 Query parameter 라고 부른다. Query parameter는 주로 데이터를 조건으로 거르거나(filtering), 특정 방식으로 정렬하거나(sorting), 검색(searching)하고자 하는 경우에 활용된다.
검색 키워드는 body를 통해 전달하지 않고, query string을 활용한다.
같은 결과일 때 path와 query 중 어떤 방법을 사용해야 할까? 보통 이렇게 간단한 경우에는 path를 사용한다.
[참고 사이트]
When Should You Use Path Variable and Query Parameter?
Django REST Framework란?