Экспресс-пост на тему HTTP-методов, которая часто встречается на собесах.

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

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

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

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

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

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

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

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

#быстростатья

Экспресс-пост на тему HTTP-методов, которая часто встречается на собесах | Сетка — социальная сеть от hh.ru Экспресс-пост на тему HTTP-методов, которая часто встречается на собесах | Сетка — социальная сеть от hh.ru