Ответ
PUT и PATCH — это HTTP-методы для обновления ресурсов, но с разной семантикой.
PUT
- Полная замена. Клиент должен отправить полное представление ресурса, даже если меняется одно поле.
- Идемпотентность. Многократные одинаковые запросы дают тот же результат, что и один.
- Использование: Обновление ресурса, когда известны все его атрибуты.
PUT /api/users/123
Content-Type: application/json
{
"name": "Иван",
"email": "ivan@example.com", // Все поля обязательны
"age": 30
}
PATCH
- Частичное обновление. Клиент отправляет только изменяемые поля.
- Не всегда идемпотентен. Результат нескольких одинаковых PATCH-запросов может отличаться (например, инкремент счётчика).
- Использование: Экономия трафика и предотвращение конфликтов при обновлении больших объектов.
- Форматы: Часто используется JSON Patch (RFC 6902).
PATCH /api/users/123
Content-Type: application/json
{
"age": 31 // Только изменяемое поле
}
// Или с JSON Patch
PATCH /api/users/123
Content-Type: application/json-patch+json
[
{ "op": "replace", "path": "/age", "value": 31 }
]
Ключевое отличие: PUT заменяет ресурс целиком, PATCH применяет к нему изменения.
Ответ 18+ 🔞
Давай разберём эту дичь про PUT и PATCH, а то народ путается, как мухи в паутине, а потом удивляется, почему у него API ебётся с концами.
Представь, что у тебя есть профиль в соцсети — карточка пользователя. Имя, почта, возраст, всякая хуйня.
PUT — это когда ты такой: «Всё, хуй с ним, переписываю всё заново!»
Ты должен отправить полный образ ресурса, даже если меняешь одну строчку. Если что-то пропустишь — это поле на сервере может обнулиться или вообще хуй знает куда пропасть. Запрос идемпотентный — сколько раз ни отправляй одно и то же, результат будет как после первого раза. Полная замена, без вариантов.
PUT /api/users/123
Content-Type: application/json
{
"name": "Иван",
"email": "ivan@example.com", // Всё, блядь, целиком! Даже если менял только возраст.
"age": 30
}
Представь, что ты принёс новый холодильник, а старый выкинул нахуй. Всё, целиком.
PATCH — это хитрая жопа. «Я только возраст поправлю, остальное трогать не буду».
Отправляешь только то, что меняется. Остальные поля остаются как были. Трафик экономится, да и конфликтов меньше, когда десять человек одновременно лезут в один объект. Но тут есть подвох — он не всегда идемпотентный. Если в PATCH-запросе будет «увеличить счётчик на 1», то каждый новый такой же запрос даст новый результат. А с PUT такого не бывает.
PATCH /api/users/123
Content-Type: application/json
{
"age": 31 // Только возраст, остальное не трогаем. Умно, да?
}
// А можно и по-умному, через JSON Patch (RFC 6902)
PATCH /api/users/123
Content-Type: application/json-patch+json
[
{ "op": "replace", "path": "/age", "value": 31 }
]
Так в чём, блядь, разница-то ключевая?
- PUT — вырезать всё и вставить новое. Полная замена. Идемпотентно.
- PATCH — точечно подправить, как хирург скальпелем. Частичное обновление. Может быть не идемпотентным.
Выбирай по ситуации. Если ресурс небольшой и ты всегда им полностью владеешь — можно и PUT. Если объект большой, или над ним работает несколько клиентов, или трафик жалко — твой выбор PATCH. Главное — не путай их, а то получишь ебучую кашу в данных вместо работающего API.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶