Ответ
Оба метода используются для обновления ресурсов, но с разной семантикой.
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 эффективен для точечных обновлений (например, изменение статуса, увеличение счетчика).