카테고리 없음

REST API를 디자인 하는 방법

yisj 2023. 10. 20. 09:29

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