Какие основные HTTP методы используются в REST API?
Что проверяют
Знаете ли вы не только названия, но и свойства методов: безопасность и идемпотентность. Именно на них строятся повторные запросы и кэширование.
Как отвечать
- GET: получить ресурс. Безопасный (ничего не меняет) и идемпотентный, кэшируется;
- POST: создать подчинённый ресурс или выполнить операцию. Не идемпотентный: два запроса создадут две записи;
- PUT: заменить ресурс целиком по известному адресу. Идемпотентный: повтор даёт то же состояние;
- PATCH: изменить часть ресурса. Идемпотентность зависит от тела: замена поля идемпотентна, инкремент нет;
- DELETE: удалить. Идемпотентный: повторное удаление оставляет систему в том же состоянии, хотя код ответа может быть уже 404;
- HEAD и OPTIONS: заголовки без тела и список поддерживаемых методов, второй используется в preflight-запросах CORS.
Идемпотентность это не про одинаковый код ответа, а про одинаковое состояние системы после повтора. Практическая ценность прямая: клиент и прокси могут безопасно повторить неидемпотентный запрос только с ключом идемпотентности, иначе получится двойной платёж.
Коды ответов, которые ждут вместе с методами: 200 и 204 на успех, 201 с заголовком Location на создание, 400 и 422 на ошибки клиента, 401 против 403, 404, 409 на конфликт, 500.
Где спотыкаются
Считают POST и PUT синонимами и не могут сказать, чем отличается повтор.
Называют DELETE неидемпотентным из-за 404 на втором вызове.
Делают изменяющие операции через GET, после чего их выполняет предзагрузка браузера или краулер.
Отвечают 200 с телом ошибки внутри. Для клиента запрос при этом успешен.