REST는 리소스에 작용하는 동사로 표준 HTTP method를 사용한다. CRUD(Create, Read, Update, Delete)에 대한 흔한 대응은 다음과 같다:
REST는 리소스에 작용하는 동사로 표준 HTTP method를 사용한다. CRUD(Create, Read, Update, Delete)에 대한 흔한 대응은 다음과 같다:
| CRUD | Method | 대표적 용도 |
|---|
| Create | POST | collection에 새 리소스 추가 |
| Read | GET | 리소스 또는 목록 가져오기 |
| Update (전체) | PUT | 리소스를 통째로 교체 |
| Update (부분) | PATCH | 일부 필드 수정 |
| Delete | DELETE | 리소스 제거 |
POST /users HTTP/1.1
Content-Type: application/json
{ "name": "Ann", "email": "[email protected]" }
HTTP/1.1 201 Created
Location: /users/42
{ "id": 42, "name": "Ann", "email": "[email protected]" }
PUT /users/42는 전체 representation을 보내 교체하고, PATCH /users/42는 바꿀 필드만 보낸다(예: { "email": "[email protected]" }).
이 둘은 서로 다른 속성이다:
GET, HEAD, OPTIONS가 safe다.GET, PUT, DELETE, HEAD가 idempotent다.Method Safe? Idempotent?
GET yes yes
HEAD yes yes
PUT no yes (replacing with the same body twice = same result)
DELETE no yes (deleting twice = still deleted)
PATCH no no* (depends on the patch; not guaranteed)
POST no no (posting twice usually creates two resources)
면접관은 당신이 신뢰할 수 있는 API를 만들 만큼 HTTP 시맨틱을 잘 이해하는지 보려고 이를 묻는다. safe/idempotent 구분은 학문적인 것이 아니다: client, proxy, CDN이 무엇을 해도 되는지를 직접 규정한다. safe method는 자유롭게 캐시·prefetch될 수 있고, idempotent method는 네트워크 timeout 후 side effect 중복 위험 없이 자동으로 retry될 수 있다 — 그래서 client는 PUT이나 DELETE를 안전하게 retry할 수 있지만 POST retry는 조심해야 한다(주문 두 개가 생길 수 있다). 고전적 실수는 GET으로 side effect를 유발하는 것(예: GET /users/42/delete)으로, 캐싱을 깨뜨리고 크롤러가 실수로 데이터를 변경하게 만든다. 알맞은 method를 고르고 — 그 safety와 idempotency 계약을 존중하는 것 — 이 API를 예측 가능하고 그 주위에 도구를 만들기 안전하게 한다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기