Какие HTTP-методы идемпотентны?
- Что такое идемпотентный метод HTTP?
- Чем безопасный метод отличается от идемпотентного?
Идемпотентны GET, HEAD, OPTIONS, PUT, DELETE: повтор запроса оставляет сервер в том же состоянии. POST и обычно PATCH — нет.
- Идемпотентность — про состояние сервера, а не про одинаковый ответ: второй DELETE вернёт 404
- Безопасные (не меняют состояние): GET, HEAD, OPTIONS
- Идемпотентные запросы клиенты, прокси и браузеры могут повторять сами
А ещё Для POST — ключ идемпотентности
Подробно
Идемпотентность — свойство, при котором многократное выполнение запроса даёт тот же эффект на сервере, что и однократное. Ответы при этом могут различаться: первый DELETE /orders/5 вернёт 204, второй — 404, но заказ удалён и после одного, и после двух вызовов.
По спецификации HTTP:
- безопасные методы — GET, HEAD, OPTIONS — не должны менять состояние вообще; они автоматически идемпотентны;
- PUT — «положить ресурс целиком в это состояние» — идемпотентен;
- DELETE — идемпотентен;
- POST — «обработать» или «создать» — не идемпотентен: два запроса создают два ресурса;
- PATCH — не гарантирует: «установить поле» идемпотентно, «прибавить к счётчику» — нет.
Почему это важно: сеть ненадёжна, и клиент, не получив ответа, не знает, выполнился ли запрос. Идемпотентные запросы можно безопасно повторить — так делают HTTP-клиенты с повторами, балансировщики и прокси. Браузер предупреждает о повторной отправке формы именно потому, что POST — не идемпотентен.
Проектирование API: не менять состояние в GET (иначе краулер или предзагрузка удалят данные); для создания — POST с ключом идемпотентности или PUT с идентификатором от клиента.
Что хотят услышать
- Список идемпотентных и неидемпотентных методов.
- Определение через состояние сервера, пример с DELETE.
- Различие безопасных и идемпотентных.
- Практический смысл: безопасные повторы, ключ идемпотентности для POST.
Частые ошибки
- Считать DELETE неидемпотентным из-за разных ответов.
- Менять состояние в GET.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓GET
- ✓PUT
- ✓DELETE
- ✗POST
Что спросят дальше
- Как сделать создание ресурса безопасным при повторе?
- Чем 409 отличается от 422?
Разбор темы
- Проектирование API: REST, gRPC и события
Выбор стиля взаимодействия, семантика и идемпотентность HTTP, формат ошибок, курсорная пагинация против offset, версионирование и обратная совместимость, контрактное тестирование.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.