ENIGMA AI
ENIGMA AI

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

встречается 11× HTTP junior web

Как ответить

Основное различие между PUT и PATCH в том, что PUT заменяет ресурс целиком, а PATCH — изменяет только указанные поля. PUT идемпотентен: повторный запрос с теми же данными даст тот же результат. PATCH не обязан быть идемпотентным — один и тот же запрос, применённый несколько раз, может привести к разным состояниям (например, увеличение счётчика на 1).

Рассмотрим на примере: у нас есть пользователь с полями name, email, age.

PUT — передаём полный объект:

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

{
  "name": "Иван Петров",
  "email": "ivan@example.com",
  "age": 30
}

Если не передать поле age, сервер обычно установит его в null или значение по умолчанию — ресурс перезаписывается целиком.

PATCH — передаём только то, что нужно изменить. Самый простой способ — передать частичный JSON (JSON Merge Patch, RFC 7396):

PATCH /users/123
Content-Type: application/merge-patch+json

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

В этом случае остальные поля (name, age) остаются без изменений.

Другой формат — JSON Patch (RFC 6902), где операции описываются явно:

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

[
  { "op": "replace", "path": "/email", "value": "newemail@example.com" }
]

Этот формат точнее описывает действия (добавить, удалить, заменить).

Практические советы для junior:

  • Если клиент отправляет весь ресурс — используйте PUT. Даже если изменили только одно поле, но передали всё — PUT.
  • Если нужно изменить одно-два поля и не хотите рисковать, что незаданные поля сбросятся — используйте PATCH.
  • Учитывайте, что не все серверы правильно обрабатывают PATCH — иногда за ним скрывается полная замена. Всегда читайте документацию API.
  • Идемпотентность PUT позволяет безопасно повторять запросы при сетевых ошибках. PATCH без идемпотентности может вызвать дублирование действий; для критических операций лучше сделать PUT или обеспечить идемпотентность на уровне логики.

В REST-дизайне это различие важно: PUT для обновления всего ресурса (или создания с известным ID), PATCH — для частичного изменения.

Ключевые тезисы

  • PUT заменяет ресурс полностью, PATCH — частично.
  • PUT всегда идемпотентен, PATCH не обязан быть идемпотентным.
  • PUT требует тело с полным представлением; PATCH — только изменения (форматы: JSON Merge Patch, JSON Patch).
  • При PUT незаданные поля часто сбрасываются; при PATCH — остаются прежними.
  • Выбор между PUT и PATCH зависит от семантики операции и требований к идемпотентности.

Что спросят дальше

  • — Как сервер должен различать PUT и PATCH на уровне кода?
  • — Какие HTTP-статусы (200, 204, 202) подходят для ответов на PUT и PATCH?
  • — Можно ли создать новый ресурс через PATCH? В чём риск?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение