Механизм для обеспечения возможности многократности вызова запроса с гарантией того, что состояние системы изменится единожды. В REST API это свойство гарантирует, что многократное выполнение операции с теми же параметрами даёт результат, аналогичный его однократному выполнению.
В рамках протокола HTTP идемпотентными являются глаголы GET
, PUT
, DELETE
. Метод POST
неидемпотентен, поскольку предполагает создание нового ресурса на сервере. Также неидемпотентным считается глагол PATCH
(согласно RFC 5789) засчёт своей природы (частичное обновление ресурса, в рамках такой операции у ресурса могут увеличиваться счётчики или добавляться значение в коллекцию данных), хотя этому методу можно обеспечить данное свойство благодаря особенностям реализации.
Если рассмотреть каждый HTTP Verb отдельно:
POST
— неидемпотентен, создаёт новый ресурс;GET
— идемпотентен, получение данных, не изменяет состояние системы;PUT
— идемпотентен, обновление ресурса целиком;PATCH
— изначально неидемпотентен, частичное обновление ресурса, может стать таковым через детали реализации;DELETE
— идемпотентен, удаление ресурса.
Кеширование
Идемпотентные операции можно кешировать, поскольку результаты таких операций предсказуемы.