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

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

Ответ

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

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

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

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

{
    "email": "new.email@example.com"
}

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

@PatchMapping("/users/{id}")
public ResponseEntity<User> partialUpdate(
        @PathVariable Long id,
        @RequestBody Map<String, Object> updates) {
    User user = userRepository.findById(id).orElseThrow();
    // Применяем только переданные поля
    if (updates.containsKey("name")) {
        user.setName((String) updates.get("name"));
    }
    if (updates.containsKey("email")) {
        user.setEmail((String) updates.get("email"));
    }
    return ResponseEntity.ok(userRepository.save(user));
}

Когда использовать PATCH: При обновлении одного-двух полей большого ресурса для экономии трафика и предотвращения конфликтов при параллельном редактировании.