Какой метод HTTP не является идемпотентным
Метод POST не является идемпотентным — повторный вызов с теми же данными может привести к разным результатам (например, создать несколько одинаковых записей). Методы GET, PUT, DELETE, HEAD и OPTIONS являются идемпотентными: повторный вызов возвращает тот же результат.
| HTTP-метод | Идемпотентный | Безопасный (read-only) |
|---|---|---|
| GET | Да | Да |
| HEAD | Да | Да |
| OPTIONS | Да | Да |
| PUT | Да | Нет |
| DELETE | Да | Нет |
| POST | Нет | Нет |
| PATCH | Нет | Нет |
Идемпотентность означает, что многократное выполнение одного и того же запроса даёт тот же результат, что и однократное. PUT идемпотентен, потому что повторная установка ресурса в то же состояние не меняет результат. POST не идемпотентен, потому что каждый вызов может создать новый ресурс.
Это свойство важно для обработки сетевых ошибок: GET/PUT/DELETE можно безопасно повторить при таймауте, а POST — нет (без дополнительных мер вроде idempotency key).
На собеседовании: используйте правильный термин — «идемпотентный», а не «неизменяемый». Частая ошибка — забыть про PATCH (он тоже не идемпотентен). Бонусный балл — упомянуть idempotency key для POST.