Чем HTTP-метод PATCH отличается от PUT?

«Чем HTTP-метод PATCH отличается от PUT?» — вопрос из категории HTTP и веб-протоколы, который задают на 23% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PATCH и PUT — это HTTP-методы для обновления ресурсов, но с фундаментальным отличием в семантике.

Аспект PUT PATCH
Семантика Полная замена. Клиент отправляет новое представление ресурса целиком. Частичное обновление. Клиент отправляет только изменяемые поля.
Идемпотентность Да. Многократный вызов с одними данными дает тот же результат. Не гарантируется. Зависит от реализации операции на сервере.
Использование Когда известны все атрибуты ресурса. Когда нужно обновить 1-2 поля, не затрагивая остальные.

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

PATCH /api/v1/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>

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

Ожидаемый ответ (200 OK):

{
    "id": 123,
    "username": "john_doe",
    "email": "new.email@example.com",
    "role": "user"
}

Ключевые моменты для тестирования API:

  1. Валидация: Сервер должен корректно обрабатывать частичные данные и возвращать ошибку (например, 422 Unprocessable Entity) при попытке обновить неизменяемые или несуществующие поля.
  2. Безопасность: Проверять, что с помощью PATCH нельзя изменить поля, не предназначенные для обновления (например, id или is_admin), если это не разрешено политикой.
  3. Документация: API должно четко указывать, какие поля можно обновлять с помощью PATCH.
  4. Сценарии: Тестировать отправку пустого тела запроса, некорректных типов данных и обновление несуществующего ресурса (должен вернуть 404 Not Found).