Collection Pattern 적용
CRUD를 중요한 특징에 따라 구분하면 Command와 Query 둘로 나눌 수 있다.
Command → Create, Update, Delete ⇒ 상태가 변함. 안전하지 않음.
Query → Read ⇒ 상태가 변하지 않음. 안전함. 분산, 캐시 등이 수월함.
HTTP Method
Collection Pattern과 HTTP Method를 이용해 CRUD를 표현할 수 있다.
GET → Read
POST → Create
PUT, PATCH → Update, PUT Override 를 하기 때문에, 생성 할 수도 있지만 우리는 그냥 수정이라 생각하자
DELETE → Delete
게시물
GET /posts→ 게시물 목록 (Read, Collection) → List (습관적인 표현 중 하나)GET /posts/{id}→ 게시물 상세 (Read, Element) → Detail (습관적인 표현 중 하나)POST /posts→ 게시물 생성 (Create) → Post ID는 서버에서 생성함.PUT 또는 PATCH /posts/{id}→ 게시물 수정 (Update, Element)DELETE /posts/{id}→ 게시물 삭제 (Delement, Element)
종종 Bulk(여러개) update, Bulk delete 등을 하기도 함. -> 이럴 때는 Collection을 활용하고, API 스펙 문서에 정확히 기록.(문서화는 정말 중요하다!!) -> 예를들어, JSON 형식으로 아래와 같이 여러개의 ID 를 전달할 수 있다. "Ids" : [1,2,3,4]
댓글
그냥 바로 comments로 시작하는 경우:
GET /comments→ 전체 댓글 목록GET /comments?post_id={post_id}→ 특정 게시물에 대한 댓글 목록GET /comments/{id}→ 댓글 상세POST /comments→ 댓글 생성 ⇒ 어떤 게시물에 대해? → Body에 Post ID 정보를 담아줘야 함.POST /comments?post_id={post_id}→ 특정 게시물에 대한 댓글 생성PUT 또는 PATCH /comments/{id}→ 댓글 수정DELETE /comments/{id}→ 댓글 삭제
특정 게시물 아래로 표현하는 경우:
GET /posts/{post_id}/comments→ 특정 게시물에 대한 댓글 목록GET /posts/{post_id}/comments/{id}→ 특정 게시물에 달린 특정 댓글 상세POST /posts/{post_id}/comments→ 특정 게시물에 대한 댓글 작성PUT 또는 PATCH /posts/{post_id}/comments/{id}→ 특정 게시물에 달린 특정 댓글 수정DELETE /posts/{post_id}/comments/{id}→ 특정 게시물에 달린 특정 댓글 삭제
로그인/로그아웃
로그인과 로그아웃을 어떻게 리소스로 표현할 수 있을까? 이럴 때는 추상적인 개념인 “세션”을 도입하곤 한다.
POST /session→ 세션 생성 = 로그인DELETE /session→ 세션 파괴 = 로그아웃
덤으로…
GET /session→ 세션 확인 → 내 정보 확인?GET /users/me→ User ID를 me라고 쓰면, 현재 사용자의 User ID로 처리하게 정하고, API 스펙 문서에 기록.
Last updated