Какие самые распространенные HTTP методы и их назначение
Что проверяют
Понимаете ли вы назначение методов и их свойства: безопасность и идемпотентность. На них держатся повторы запросов, кэширование и поведение прокси.
Как отвечать
- GET: получить представление ресурса. Ничего не меняет, поэтому безопасный и кэшируемый;
- POST: создать подчинённый ресурс или запустить операцию. Повтор создаёт вторую сущность;
- PUT: положить ресурс целиком по известному адресу. Повтор даёт то же состояние;
- PATCH: изменить часть ресурса;
- DELETE: удалить. Повтор оставляет систему в том же состоянии;
- HEAD: как GET, но без тела. Проверить наличие или размер;
- OPTIONS: какие методы поддерживает ресурс, используется браузером в предварительном запросе CORS.
Два свойства, которые спрашивают следом:
Безопасный значит не меняет состояние: GET, HEAD, OPTIONS. Поэтому предзагрузка браузера и краулеры ходят по ним свободно.
Идемпотентный значит повтор не меняет результат: GET, PUT, DELETE, HEAD, OPTIONS. POST и PATCH в общем случае нет. Отсюда практика: повторять при таймауте можно только идемпотентный запрос, а для POST нужен ключ идемпотентности, иначе получится двойная оплата.
Где спотыкаются
Меняют данные через GET, после чего изменения выполняет предзагрузка ссылки.
Считают DELETE неидемпотентным, потому что второй вызов вернёт 404. Код другой, состояние то же.
Не различают PUT и PATCH и шлют часть полей в PUT, обнуляя остальные.
Не знают про OPTIONS и не понимают, откуда в логах предварительные запросы.