Для чего используется HTTP-метод PATCH?

«Для чего используется HTTP-метод PATCH?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PATCH — это HTTP-метод для частичного обновления существующего ресурса. В отличие от PUT, который заменяет ресурс целиком, PATCH применяет набор изменений ("патч") к ресурсу.

Основное назначение:

  • Эффективное обновление только изменённых полей ресурса, уменьшая объём передаваемых данных.
  • Реализация сложных операций обновления, которые не являются простой заменой.

Пример запроса PATCH:

PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json-patch+json

[
  { "op": "replace", "path": "/email", "value": "new.email@example.com" },
  { "op": "add", "path": "/tags", "value": ["premium"] }
]

Форматы патчей:

  1. JSON Patch (RFC 6902): Стандартный формат с операциями add, remove, replace, move, copy, test. (Как в примере выше).
  2. JSON Merge Patch (RFC 7396): Передаётся фрагмент JSON, который "вливается" в целевой ресурс. Для удаления поля используется значение null.
    { "email": "new.email@example.com", "age": null }

Пример на Spring Boot:

@PatchMapping(path = "/users/{id}", consumes = "application/json-patch+json")
public ResponseEntity<User> patchUser(@PathVariable Long id, @RequestBody JsonPatch patch) {
    User user = userService.findById(id);
    User patchedUser = applyPatch(patch, user); // Применение патча к entity
    userService.save(patchedUser);
    return ResponseEntity.ok(patchedUser);
}
Ключевые отличия от PUT: Метод Идемпотентность Семантика Передаваемые данные
PUT Да Полная замена ресурса Новое состояние ресурса целиком
PATCH Нет (в общем случае) Частичное обновление Инструкции по изменению (патч)

Важно: Реализация PATCH на сервере должна корректно обрабатывать конфликты и гарантировать атомарность применения изменений.