PUT은 지정한 URL에 리소스 전체를 통째로 교체(또는 없으면 생성)합니다. 같은 요청을 여러 번 보내도 최종 상태가 같으므로 멱등합니다.
PUT은 리소스의 '전체 표현'을 보내는 것이 핵심입니다. 일부 필드만 보내면 나머지가 사라질 수 있으므로, 부분 수정은 PATCH를 씁니다. 대상이 없으면 201 Created로 새로 만들고, 기존 것을 바꾸면 200 또는 본문 없는 204 No Content로 응답합니다.
동시 수정 충돌(lost update)을 막으려면 `If-Match: <ETag>` 조건부 요청을 씁니다. ETag가 어긋나면 서버가 412 Precondition Failed로 거부해, 다른 사람이 먼저 바꾼 내용을 덮어쓰는 사고를 방지합니다.
PUT /api/users/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{ "id": 42, "name": "Ada Lovelace" }HTTP/1.1 200 OK
Content-Type: application/json
{ "id": 42, "name": "Ada Lovelace" }curl -X PUT https://api.example.com/api/users/42 \
-H 'Content-Type: application/json' \
-d '{"id":42,"name":"Ada Lovelace"}'await fetch('/api/users/42', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(fullUser)
});