В чём отличие HTTP-метода PATCH от PUT в REST API?

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

Ответ

PATCH предназначен для частичного обновления ресурса, в то время как PUT предполагает полную замену ресурса.

Критерий PUT PATCH
Семантика Замена всего ресурса Частичное обновление
Идемпотентность Гарантируется (повторные вызовы дают тот же результат) Не гарантируется по спецификации
Тело запроса Новое полное представление ресурса Набор инструкций (патч) для изменения

Пример PATCH-запроса (формат JSON Patch):

PATCH /api/users/123 HTTP/1.1
Content-Type: application/json-patch+json

[
  { "op": "replace", "path": "/email", "value": "new@example.com" },
  { "op": "add", "path": "/phone", "value": "+79991234567" },
  { "op": "remove", "path": "/oldField" }
]

Пример обработки в Spring Boot:

@PatchMapping("/users/{id}")
public ResponseEntity<User> updateUser(
        @PathVariable Long id,
        @RequestBody JsonPatch patchDocument) {
    User existingUser = userService.findById(id);
    User patchedUser = jsonPatchService.apply(patchDocument, existingUser);
    userService.save(patchedUser);
    return ResponseEntity.ok(patchedUser);
}