프로젝트를 리팩토링하며 처음에는 신경쓰지 않았던 API path들이 거슬리기 시작했다.
일단 REST API란 HTTP 프로토콜을 기반으로 서버와 클라이언트가 데이터를 주고받는 방식이다.
주요 특징은 아래와 같다.
- 리소스 기반
- HTTP 메서드 사용
- 무상태성 (상태를 저장하지 않으며, 각 요청은 독립적)
- 응답 방식 (JSON / XML)
그래서 도메인 엔티티들의 리소스를 어떻게 명시해야 RESTful하게 설계할 수 있을까 ?
내가 고민했던 부분의 path는 다음과 같다.
// 시작을 comments로 하는 경우
POST /comments/talk-rooms/{talkRoomId} // 대화방에 댓글 작성
GET /comments/talk-rooms/{talkRoomId} // 대화방의 모든 댓글 조회
// 끝을 comments로 하는 경우
POST /talk-rooms/{talkRoomId}/comments // 대화방에 댓글 작성
GET /talk-rooms/{talkRoomId}/comments // 대화방의 모든 댓글 조회
리소스를 명사로 표현한 것은 잘 지켰지만 순서의 차이가 있다.
쉽게 생각할 수도 있지만, 나는 첫 번째 방식으로 구현하려 했다.
이유는 해당 컨트롤러에 있는 다른 API들이 모두 comments로 시작하는? 느낌이 강해서 통일하려는 목적이 강했다.
그런데 고민을 해보니 현재 가져오는 데이터는 대화방 내의 댓글을 다루는 것이다.
RESTful한 설계를 자세하게 찾아보니 경로는 상위 리소스에서 하위 리소스로 계층적으로 표현한다.
따라서 현재 상황에서 대화방 내의 댓글을 다룬다면 /talk-rooms/{talkRoomId}/comments처럼 표현하는 것이 맞다. 😝
'프로젝트' 카테고리의 다른 글
CompletableFuture를 활용한 도서 베스트셀러 저장 성능 개선 (1) | 2024.10.24 |
---|---|
AOP를 통한 유저 인증 정보 미리 주입하기 (0) | 2024.07.23 |
[지성인] JaCoCo 테스트 분석 도구 적용, 프로젝트 테스트 커버리지 확인 (1) | 2024.07.09 |
[지성인] 한줄평 좋아요 중복 생성 동시성 문제 (0) | 2024.07.06 |