Ответ
Оба метода используются для обновления ресурсов, но с разной семантикой.
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 эффективен для точечных обновлений (например, изменение статуса, увеличение счетчика).
Ответ 18+ 🔞
Давай разберем эту дичь, чтобы не путаться, как манда с ушами. Тут два способа обновить что-то на сервере, и разница между ними — просто овердохуища.
PUT — это когда ты приносишь всё заново, полную замену. Представь, тебе надо переписать сочинение. Ты не исправляешь ошибки, а выкидываешь старый лист и пишешь новый, с чистого листа. Если в новом тексте чего-то нет — считай, этого и не должно быть. Сервер тупо заменяет одну хуйню на другую.
// Говорим серверу: "Забудь всё, что знал про юзера 123. Вот новый, полный набор данных"
$client->put('/api/users/123', [
'json' => [
'name' => 'Иван Иванов',
'email' => 'ivan@example.com',
'age' => 30
// Поле 'phone' тут не упомянуто? Ну всё, считай, его у пользователя больше нет. Похуй.
]
]);
PATCH — это уже хитрая жопа. Точечный ремонт. Тебе не надо переписывать всё сочинение, ты просто берёшь ручку и исправляешь в старом тексте одно слово. Отправляешь только то, что меняется. Всё остальное лежит себе спокойно и не трогается.
// Говорим серверу: "Слушай, у юзера 123 день рождения был. Поменяй только возраст, а имя и почту не трогай, они норм"
$client->patch('/api/users/123', [
'json' => [
'age' => 31
// 'name' и 'email' остаются как были, их даже упоминать не надо
]
]);
Так в чём же, блядь, соль?
- Идемпотентность (страшное слово):
PUT— идемпотентный. Это значит, если ты десять раз подряд шлёшь один и тот же запрос — результат будет как от одного. Отправил новый портрет пользователя десять раз — в базе будет тот же самый новый портрет.PATCHтаким быть не обязан. Если десять раз отправить "увеличить счётчик на 1", он увеличится на 10, ёпта. Хотя хорошие ребята стараются делать иPATCHпредсказуемым. - Смысл:
PUT— это "засунь вот ЭТО целиком на это место".PATCH— это "примени вот ЭТИ заплатки к тому, что уже лежит на этом месте". - Когда что использовать:
PUT— когда у тебя есть вся информация и ты её полностью контролируешь (та самая форма редактирования профиля, где все поля).PATCH— для мелких правок, когда лень или не нужно тащить всю простыню данных (поставил лайк, сменил статус, обновил один параметр). Удобно, быстро, трафика меньше.
Короче, если хочешь заменить весь ресурс — PUT. Если хочешь подправить пару полей — PATCH. Всё просто, как хуй с горы. Главное — не перепутай, а то вместо смены почты пользователь может превратиться в пустое место, и будет тебе хиросима.