At a Glance
GET /players/42 HTTP/1.1
Host: example.com
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{"id":42,"name":"Mina"}HTTP는 request와 response의 의미를 정의합니다. TCP 연결 하나, TLS session 하나, HTTP request 하나를 같은 수명으로 보지 않습니다.
Method 의미
GET은 자원 표현 조회, POST는 대상 자원에 처리 요청, PUT은 target의 상태 생성·교체, PATCH는 부분 변경, DELETE는 삭제 요청에 사용합니다. 실제 API 계약이 method 의미와 일치해야 cache, retry, proxy가 안전하게 동작합니다.
Safe method와 idempotent method를 구분합니다. HTTP 의미론에서 PUT과 DELETE는 idempotent method이며 여러 번 같은 요청을 적용한 의도된 server 효과가 한 번 적용했을 때와 같아야 합니다. 응답 코드나 logging 같은 부수 효과까지 완전히 같다는 뜻은 아니며, 구현이 이 계약을 깨면 자동 retry가 위험해집니다.
Status와 실패
2xx는 요청 처리 성공, 3xx는 추가 위치·조건, 4xx는 client 요청 문제, 5xx는 server 처리 실패 범주입니다. 200만 성공으로 고정하지 않고 생성의 201, body 없는 성공의 204, 조건부 요청의 304 등 계약에 맞는 상태를 씁니다.
자주 틀리는 점
- GET과 POST 차이를 query string과 body 유무만으로 설명하지 않습니다.
- HTTP status 성공과 business operation 최종 확정을 구분합니다.
- Retry 가능한 method라도 timeout 뒤 server가 이미 처리했을 수 있어 idempotency key가 필요할 수 있습니다.
Content-Type과Accept의 방향을 구분합니다.
참고 링크
2 sources