Ответ
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);
}