REST API를 디자인할 때, CRUD까지는 어느정도 이해했다.
C는 POST
R은 GET
U는 PUT
D는 DELETE
메서드를 사용하되, URI는 해당 자원의 경로를 나타낸다.
예를 들어
METHOD | URI | 설명 |
GET | /student | 모든 학생들의 목록을 가져온다. |
GET | /student/1 | 학번이 1인 학생을 가져온다. |
POST | /student | 새로운 학생을 추가한다. |
PUT | /student/1 | 학번이 1인 학생 정보를 수정한다. |
DELETE | /student/1 | 학번이 1인 학생을 삭제한다. |
여기서 고민이 되는 점이 몇가지가 있다.
1. PUT
예를 들어 PUT을 할 때, 사실 /student라는 경로에 id를 포함한 데이터를 보내면, 사실 URI에 학번을 명시하지 않더라도 특정 학번의 학생 정보를 수정할 수는 있기는 하다. 그러나 논리적으로는 URI가 /student인 것과 /student/1인 것을 구분할 필요가 있다. 전자는 모든 학생의 정보를 수정하는 것으로, 후자는 학번이 1인 학생의 정보만을 수정하는 것으로 생각할 수 있다.
2. 검색기능
다음으로 검색을 할 때이다. 검색 기능은 어떻게 구현할까? 이 때에는 GET 요청을 할 때 목록(/student)을 요청하되, 파라미터로 검색 조건을 추가해준다. 예를 들어
/student?lastName=Park&age=22
=> 학생의 목록에서 성이 Park이고 age가 22인 것만 필터링해서 요청
3. 정렬기능
정렬기능도 GET 요청으로 목록을 요청하되, sort 파라미터를 사용하여 정렬 조건을 추가해준다.
/post?sort=+title,-createdat
먼저 title로 오름차순 정렬, createdat으로 내림차순 정렬해서 보여준다.
4. 버전관리
URI의 맨 앞에 버전을 사용하여 다음과 같이 구분할 수 있다.
/v1/student
/v2/student
다음 글을 참고했다.
https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/
Best practices for REST API design - Stack Overflow
March 2, 2020Best practices for REST API designIn this article, we'll look at how to design REST APIs to be easy to understand for anyone consuming them, future-proof, and secure and fast since they serve data to clients that may be confidential. REST APIs
stackoverflow.blog