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

Ответ

Основное различие заключается в способе обновления ресурса на сервере: PATCH применяет частичные изменения, а PUT полностью заменяет ресурс.

PUT

  • Назначение: Полная замена существующего ресурса или создание нового по указанному URI.
  • Идемпотентность: Да. Многократное выполнение одного и того же PUT-запроса приведет к тому же состоянию ресурса.
  • Тело запроса: Должно содержать полную репрезентацию ресурса. Поля, не указанные в запросе, будут удалены или сброшены к значениям по умолчанию.

PATCH

  • Назначение: Частичное обновление ресурса. Применяет только те изменения, которые переданы в теле запроса.
  • Идемпотентность: Не обязательно. Два одинаковых PATCH-запроса могут привести к разным результатам (например, PATCH { "operation": "increment", "field": "counter" }).
  • Тело запроса: Содержит только изменяемые поля.

Практический пример:

Допустим, на сервере есть ресурс пользователя:

// GET /users/1
{
  "id": 1,
  "username": "alex",
  "email": "alex@example.com",
  "is_active": true
}

1. Обновление с помощью PUT (меняем только is_active)

Чтобы изменить одно поле, мы должны отправить весь объект. Если мы отправим только {"is_active": false}, поля username и email будут утеряны.

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

{
  "username": "alex",
  "email": "alex@example.com",
  "is_active": false
}

2. Обновление с помощью PATCH (меняем только is_active)

Мы отправляем только то поле, которое нужно изменить. Остальные поля остаются нетронутыми.

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

{
  "is_active": false
}

Вывод: Используйте PUT для полного замещения объекта и PATCH для экономичных и атомарных частичных обновлений, что снижает трафик и предотвращает случайную потерю данных.