← Назад к вопросам

Для чего нужен HTTP метод PATCH?

1.0 Junior🔥 101 комментариев
#Интеграции и API

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP метод PATCH: назначение и отличие от PUT

PATCH — это HTTP-метод для частичного обновления ресурса на сервере. Это одна из наиболее неправильно используемых операций в REST API, потому что многие разработчики путают PATCH с PUT.

Основное отличие: PUT vs PATCH

PUT — полная замена ресурса

При отправке PUT-запроса сервер полностью заменяет указанный ресурс переданными данными. Если не передать какое-то поле, оно удалится или переустановится в значение по умолчанию.

Первоначальное состояние пользователя:
{
  "id": 123,
  "name": "Иван",
  "email": "ivan@example.com",
  "phone": "+7-900-123-4567",
  "country": "РФ"
}

ПРИ PUT запросе:
PUT /users/123
{"name": "Иван Петров"}

Результат (полная замена):
{
  "id": 123,
  "name": "Иван Петров",
  "email": null,
  "phone": null,
  "country": null
}

Все поля, которые не передали, теряются!

PATCH — частичное обновление

При отправке PATCH-запроса сервер обновляет только переданные поля, остальные остаются неизменными.

Первоначальное состояние пользователя (то же):
{
  "id": 123,
  "name": "Иван",
  "email": "ivan@example.com",
  "phone": "+7-900-123-4567",
  "country": "РФ"
}

ПРИ PATCH запросе:
PATCH /users/123
{"name": "Иван Петров"}

Результат (обновлены только переданные поля):
{
  "id": 123,
  "name": "Иван Петров",
  "email": "ivan@example.com",
  "phone": "+7-900-123-4567",
  "country": "РФ"
}

Это то, что нам нужно!

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

1. Обновление отдельных полей

Если пользователь хочет изменить только имя, отправляем только имя:

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

{"name": "Иван Петров"}

Вместо того чтобы отправлять весь объект с PUT.

2. Мобильные приложения с медленным интернетом

Передача только одного поля вместо всего объекта экономит трафик:

Мобильное приложение меняет только статус заказа:
PATCH /orders/456
{"status": "shipped"}

Вместо PUT с полным заказом (100 полей):
PUT /orders/456
{весь заказ полностью}

3. Операции с ограничениями доступа

Пользователь может менять только своё имя и фото, но не может менять роль и дату регистрации:

ПЕН /users/me
{"name": "Новое имя", "photo": "url"}

Сервер игнорирует попытку изменить роль, если она передана.
При PUT это было бы опаснее — можно случайно потерять данные.

4. Синхронизация данных при конфликтах

Если на сервере уже есть версия 2 ресурса, а клиент отправляет обновление для версии 1:

Сервер может запустить трёхсторонний merge:
- Версия 1 (клиент)
- Версия 2 (сервер)
- PATCH с изменениями

Итог: в результате будут изменены только нужные поля,
остальное из версии 2 сохранится.

JSON Patch — стандартный формат PATCH

Для сложных обновлений используется стандарт JSON Patch (RFC 6902):

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

[
  {"op": "replace", "path": "/name", "value": "Иван Петров"},
  {"op": "add", "path": "/tags", "value": ["vip", "premium"]},
  {"op": "remove", "path": "/newsletter"}
]

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

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

1. Создание новых ресурсов

Для создания используй POST, не PATCH.

2. Если нет разницы между PUT и PATCH

Некоторые API работают одинаково и для PUT, и для PATCH. Это не ошибка, но неоптимально.

3. Когда нужна атомарность

Если обновление зависит от старых значений (например, +1 к счётчику), PATCH может привести к race conditions. Используй транзакции на сервере.

Рекомендации для Business Analyst

  • Обсуди с разработчиками, поддерживает ли ваш API PATCH для частичных обновлений
  • Документируй, какие поля допускают PATCH, а какие требуют полной замены (PUT)
  • Валидируй, что PATCH не создаёт конфликты данных (например, если меняется зависимое поле)
  • Тестируй边случаи: отправка пустого PATCH, PATCH с null, PATCH с игнорируемыми полями

ПАТЧ — это экономия трафика, удобство для клиента и безопасность данных. Правильное применение PATCH делает API более гибким и надёжным.