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

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

Ответ

Оба метода используются для обновления ресурсов, но с разной семантикой.

PUT — полная замена ресурса. Клиент отправляет полное представление ресурса. Сервер должен заменить весь ресурс предоставленными данными. Пропущенные поля могут быть установлены в null или значения по умолчанию.

// Пример запроса PUT для полного обновления пользователя
$client->put('/api/users/123', [
    'json' => [
        'name' => 'Иван Иванов',
        'email' => 'ivan@example.com',
        'age' => 30
        // Поле 'phone', если оно было, может быть удалено
    ]
]);

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

// Пример запроса PATCH для изменения только возраста
$client->patch('/api/users/123', [
    'json' => [
        'age' => 31
        // Поля 'name' и 'email' остаются прежними
    ]
]);

Ключевые различия:

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