TGViewer
Айтишник обыкновенный 🐰 Айтишник обыкновенный 🐰 @default_itshnik · 1.91K subscribers
Post #322 1.01K
Экспресс-пост на тему HTTP-методов, которая часто встречается на собесах.

В чем отличие методов POST, PUT и PATCH? Чаще спрашивают про два метода из трех: разница между POST и PUT или разница между PUT и PATCH.

Короткий ответ:
🟢POST - для создания ресурса
🔵PUT - для изменения ресурса
🟡PATCH - для частичного изменения ресурса

Разница между POST и PUT, думаю, ясна. А вот между PUT и PATCH тут немного сложнее. Смысл в том, что PUT целиком перезаписывает ресурс, соответственно, следует отправлять полный объект для изменения. А вот PATCH не перезаписывает объект, а меняет только отдельно взятые поля.

По крайней мере так предполагалось создателем HTTP и REST Роем Филдингом. Но, конечно же, под капотом внутри системы алгоритм обработки может быть какой-то свой и даже с помощью POST или PUT будет частично обновляться объект. Такое сделать можно, но с точки зрения концепции это будет неправильно.

Возвращаясь к разбору методов, как можно было уже догадаться, все они небезопасные. Это означает, что все эти методы могут изменять ресурс. Например, метод GET - безопасный, так как при правильном его использовании, ресурсы не изменяются, а только предоставляются.

А вот с идемпотентностью все немного интереснее. Идемпотентность — свойство, которое позволяет при повторном применении операции к объекту давать тот же результат, что и при первом. Например, при оформлении заказа у вас моргнул интернет, и вы не получили в приложении реакции на нажатие кнопки. Если эта операция идемпотентна, то вы сможете нажать на кнопку повторно и получить гарантировано один и тот же результат, даже если заказ уже все-таки оформлен. Если идемпотентность у такой операции отсутствует, то при повторном клике на кнопку будет создаваться новый заказ раз за разом.

Так вот, метод PUT удовлетворяет этому свойству, а POST и PATCH(частично) - нет.

Почему? Потому что PUT обращается к конкретному объекту по его ключу и полностью заменяет его, а при вызове POST генерируется новый объект. Поэтому сколько не вызови одинаковыми запросами PUT в конечном итоге будет один и тот же результат, а при использовании POST будет создано столько объектов, сколько будет отправлено запросов.

С PATCH немного сложнее, он может быть неидемпотентен в тех случаях, когда у объекта есть какой-нибудь флаг или индекс. Соответственно, при отправке нескольких запросов на один и тот же ресурс можно сломать логику у флага или сделать некорректным значение индекса.

Для метода POST можно добиться идемпотентсности искусственно. Например, можно генерировать ключ на стороне клиента или добавить на стороне сервера умный обработчик, который по каким-то параметрам будет игнорировать дубль запроса.

Для PATCH также обычно на серверной стороне добиваются идемпотентности. Например, за счет добавления дополнительной логики с проверками.

#быстростатья
  • ❤ 12
  • 👍 5
  • 🔥 5
More from @default_itshnik
  1. Mar 1, 2026Быть старпером не модно, а законно С первым днем весны! С сегодняшнего дня начинает работа…
  2. Feb 27, 2026Меня переиграл и уничтожил ребёнок Началось утро ни разу ни с кофе. И даже ни с чая. Да че…
  3. Feb 22, 2026Отправила нюдсы через пылесос! Хакеры научились следить за россиянами через умные пылесосы…
  4. Feb 19, 2026Соболезную офисным бедолагам! Сегодня на улице происходит кайфец)) Пока шел в поликлинику,…
  5. Feb 15, 2026Посмотрел на голую жопу Тимоти Шаламе (реально) 🫥 Не переживай, спойлеров не будет 😊 Што…
  6. Feb 14, 2026Я люблю тебя! Наверное, все мои коллеги по каналам уже выложили тематические валентинки. А…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →