Как работает HTTP-метод PATCH?

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

Ответ

PATCH — это HTTP-метод для частичного обновления существующего ресурса. В отличие от PUT, который требует отправки полного представления ресурса для полной замены, PATCH применяет дельту (набор изменений) только к указанным полям.

Основные принципы:

  • Клиент отправляет в теле запроса инструкции по изменению, а не целый ресурс.
  • Сервер применяет эти инструкции к целевому ресурсу.
  • Поля, не указанные в запросе, остаются неизменными.

Распространённые форматы тела запроса PATCH:

  1. JSON Merge Patch (RFC 7396):

    • Простой формат, где переданный объект JSON «вливается» в целевой.
    • Для удаления поля устанавливается значение null.
      // Запрос PATCH /users/123
      {
      "email": "new@example.com",
      "age": null
      }
    • Обновляет поле email и удаляет поле age.
  2. JSON Patch (RFC 6902):

    • Более мощный и стандартизированный формат, описывающий последовательность операций.
    • Использует массив объектов с полями op, path, value.
      // Запрос PATCH /users/123
      [
      { "op": "replace", "path": "/email", "value": "new@example.com" },
      { "op": "remove", "path": "/age" },
      { "op": "add", "path": "/phone", "value": "+1234567890" }
      ]

Пример HTTP-запроса:

PATCH /api/articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json
If-Match: "abc123" // Часто используется для оптимистичной блокировки

{"title": "Обновлённый заголовок"}

Когда использовать PATCH:

  • Обновление одного-двух полей большого объекта (экономия трафика).
  • Реализация сложных операций обновления через JSON Patch.
  • Когда PUT для полной замены ресурса неэффективен или невозможен.