회원 관리 API를 만든다고 가정해보면,
이걸 어떻게 URI로 설계할까?
⸻
제일 많이 하는 실수가 이거다.
/createMember
/updateMember
/deleteMember
이건 잘못된 접근이다.
우리가 식별해야 할 건 “행위”가 아니라 “리소스”다.
⸻
행위는 나중 문제다.
⸻
GET /members → 회원 목록
GET /members/{id} → 회원 조회
POST /members → 회원 등록
PATCH /members/{id} → 회원 수정
DELETE /members/{id} → 회원 삭제
여기서 중요한 포인트:
리소스와 행위는 반드시 분리하자
이 원칙이 REST의 핵심이다.
Ex.
GET /members?age=20
GET은 바디 사용 가능은 하지만 거의 쓰지 않는다.
⸻
POST는 한 줄로 정의하기 어렵다.
“이 리소스 URI가 정한 방식대로 요청 데이터를 처리해라.”
즉, 정해진 의미가 없다.
대표적인 사용
Ex.
POST /members
POST /orders/{id}/start-delivery
POST vs PUT 차이
이 차이는 실무에서 매우 중요하다.
리소스를 “완전히 대체”
Ex.
PUT /members/10
클라이언트가 100번 리소스를 직접 지정한다.
⸻
부분 수정
Ex.
PATCH /members/100
{
"age": 30
}
일부 필드만 변경.
⸻
리소스 제거
Ex.
DELETE /members/100
리소스를 변경하지 않는다.
로그 쌓이는 건 고려하지 않았다. “리소스 변경 여부”만 본다.
⸻
여러 번 호출해도 결과가 같다.
POST는 아니다.
왜 중요할까?
→ 서버 타임아웃 시 재요청 가능 여부의 판단 기준이 된다.
⸻
응답을 캐시할 수 있는가?
이론상:
실무상:
⸻
회원가입, 주문, 수정 등
⸻
Content-Type
HTML Form은 GET, POST만 지원한다는 점이 중요하다.
⸻
대부분
Content-Type: application/json
사실상 JSON이 표준이다.
이 부분이 실무에서 제일 많이 쓰인다.
⸻
POST /members
201 Created
Location: /members/100
서버가 URI를 관리한다.
⸻
PUT /files/star.jpg
클라이언트가 URI를 관리한다.
⸻
REST스럽지 않지만 현실적인 방식이다.
POST /members/{id}/delete
POST /orders/{id}/start-delivery
HTML FORM 제약 때문에 자주 등장한다.
출처
모든 개발자를 위한 HTTP 웹 기본 지식 (김영한, 인프런, 2020)
깔끔하게 잘 정리해놓은 것 같네요 종종 와서 참고하겠습니다~^^
화이팅입니다~!