В чем разница между HTTP-методами PUT и PATCH?

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

Ответ

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

  • PUTполная замена ресурса. Клиент должен отправить полное представление ресурса. Отсутствующие в запросе поля будут удалены или сброшены в значения по умолчанию.
  • PATCHчастичное обновление ресурса. Клиент отправляет только те поля, которые необходимо изменить.

Практический пример (Обновление пользователя):

Исходный ресурс GET /users/123:

{
  "id": 123,
  "name": "John",
  "email": "john@old.com",
  "age": 25
}

Запрос PUT:

PUT /users/123
Content-Type: application/json

{
  "name": "John Doe",
  "age": 26
}

Результат (GET /users/123): Поле email удалено, так как не было передано.

{
  "id": 123,
  "name": "John Doe",
  "age": 26
}

Запрос PATCH:

PATCH /users/123
Content-Type: application/json

{
  "age": 26
}

Результат (GET /users/123): Изменилось только поле age, email остался нетронутым.

{
  "id": 123,
  "name": "John",
  "email": "john@old.com",
  "age": 26
}

Важные свойства:

  • Идемпотентность: PUT — идемпотентен (многократный вызов с одними данными дает тот же результат). PATCHне обязательно идемпотентен (зависит от реализации сервера).
  • Использование: PUT подходит для создания/полной перезаписи ресурса, когда клиент управляет всем его состоянием. PATCH эффективен для точечных обновлений, особенно для больших ресурсов, уменьшая трафик и предотвращая конфликты.