Ответ
PATCH — это HTTP-метод для частичного обновления существующего ресурса. В отличие от PUT, который требует отправки полного представления ресурса для полной замены, PATCH применяет дельту (набор изменений) только к указанным полям.
Основные принципы:
- Клиент отправляет в теле запроса инструкции по изменению, а не целый ресурс.
- Сервер применяет эти инструкции к целевому ресурсу.
- Поля, не указанные в запросе, остаются неизменными.
Распространённые форматы тела запроса PATCH:
-
JSON Merge Patch (RFC 7396):
- Простой формат, где переданный объект JSON «вливается» в целевой.
- Для удаления поля устанавливается значение
null.// Запрос PATCH /users/123 { "email": "new@example.com", "age": null } - Обновляет поле
emailи удаляет полеage.
-
JSON Patch (RFC 6902):
- Более мощный и стандартизированный формат, описывающий последовательность операций.
- Использует массив объектов с полями
op,path,value.// Запрос PATCH /users/123 [ { "op": "replace", "path": "/email", "value": "new@example.com" }, { "op": "remove", "path": "/age" }, { "op": "add", "path": "/phone", "value": "+1234567890" } ]
Пример HTTP-запроса:
PATCH /api/articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json
If-Match: "abc123" // Часто используется для оптимистичной блокировки
{"title": "Обновлённый заголовок"}
Когда использовать PATCH:
- Обновление одного-двух полей большого объекта (экономия трафика).
- Реализация сложных операций обновления через JSON Patch.
- Когда
PUTдля полной замены ресурса неэффективен или невозможен.