PATCH는 리소스의 일부만 부분 수정합니다. 보낸 필드만 바뀌고 나머지는 그대로 유지되므로, 전체를 교체하는 PUT과 대비됩니다.
PATCH의 본문은 '변경 지시'입니다. 형식은 두 가지가 흔합니다 — 바꿀 필드만 담는 JSON Merge Patch(`application/merge-patch+json`)와, 연산 목록으로 기술하는 JSON Patch(`application/json-patch+json`).
PATCH는 스펙상 멱등이 보장되지 않습니다. 예를 들어 '수량 +1' 같은 상대 연산은 두 번 보내면 결과가 달라집니다. 절대값 지정(merge patch)으로 설계하면 사실상 멱등하게 만들 수 있고, `If-Match`로 충돌도 막을 수 있습니다.
PATCH /api/users/42 HTTP/1.1
Host: api.example.com
Content-Type: application/merge-patch+json
{ "name": "Ada L." }HTTP/1.1 200 OK
Content-Type: application/json
{ "id": 42, "name": "Ada L.", "email": "ada@example.com" }curl -X PATCH https://api.example.com/api/users/42 \
-H 'Content-Type: application/merge-patch+json' \
-d '{"name":"Ada L."}'await fetch('/api/users/42', {
method: 'PATCH',
headers: { 'Content-Type': 'application/merge-patch+json' },
body: JSON.stringify({ name: 'Ada L.' })
});