Идемпотентная операция — это операция, которая при многократном вызове не изменяет состояние системы
Результат идемпотентного вызова может меняться
Классически идемпотентны:
По умолчанию неидемпотентны:
но могут стать идемпотентными по контракту.
Свойство системы — не меняться при многократных одинаковых запросах (с теми же данными/ключом).
В некоторых публичных API для обеспечения идемпотентности, в запросах необходимо передавать заголовок Idempotency-Key UUID (4версии)
Если клиент пытается создать объект который уже есть - 409 HTTP
Когда сервис получит запрос с заголовком Idempotency-Key, он проверит, была ли ранее создана операция с таким UUID. Если операция была создана, сервер вернет объект Operation с текущим статусом этой операции.
Практики
-
Обрабатывать повторные запросы по ключу (Idempotency-Key/определяющий набор полей), хранить результат или маркер операции.
-
Для создания ресурсов возвращать один и тот же ответ (200/201) или 409, если объект уже существует.
-
Для удаления можно возвращать 204 при повторе или 410, если ресурс удалён.
-
Продумать TTL/очистку ключей, дедупликацию и защиту от гонок (lock/lease).
-
Поддерживать корректные коды для ретраев клиентов и прокси.