Распределённые данные

Идемпотентная операция

Определение

Идемпотентная операция — операция, которую можно повторять без нового изменения состояния: несколько одинаковых запросов дают тот же предполагаемый эффект, что и один. Ответы на повторы при этом могут различаться: одинаковый эффект не требует одинакового ответа.

Также ищут: Idempotent operation · idempotency

Зачем это знать

После потерянного ответа заказ или платёж уже мог выполниться. Безопасность повтора нужно доказать семантикой операции или конкретным контрактом ключа идемпотентности, включая параметры и срок хранения результата.

Связи из словаря

Карта понятия

Доказательная часть

Что подтверждено

  1. RFC 9110 называет метод идемпотентным, когда предполагаемый эффект нескольких одинаковых запросов на сервере совпадает с эффектом одного запроса.

    Граница применимости: Семантика методов HTTP; речь об эффекте, который запрашивает клиент.

  2. Идемпотентность не требует одинаковых ответов на каждый повтор. Сервер может отдельно журналировать запросы и выполнять иные побочные действия, не входящие в запрошенный идемпотентный эффект.

    Граница применимости: RFC 9110, границы предполагаемого эффекта HTTP-запроса; это не обещание отсутствия любых повторных действий.

  3. Безопасные методы HTTP, а также PUT и DELETE, определены как идемпотентные. POST не получает это свойство только из имени метода; конкретный сервис может отдельно предоставить контракт безопасного повтора.

    Граница применимости: RFC 9110, стандартные свойства методов; реализация обязана соблюдать заявленную семантику.

  4. По RFC 9110 автоматический повтор запроса с неидемпотентным методом допускается, если клиент знает об идемпотентности фактической операции либо может установить, что исходный запрос не был применён. Достаточно одного из этих оснований; само отсутствие ответа не даёт ни одного.

    Граница применимости: Рекомендация RFC 9110 для автоматических повторов HTTP после сбоя соединения.

  5. Stripe сохраняет код и тело первого ответа для ключа идемпотентности после начала выполнения запроса и возвращает этот результат при повторе, в том числе когда сохранённый ответ был ошибкой 500.

    Граница применимости: Stripe API, POST-запросы с ключом идемпотентности; не общее свойство HTTP и не гарантия успеха платежа.

  6. Stripe сравнивает параметры запроса с исходными параметрами того же ключа и отклоняет несовпадение. Повтор другого намерения под прежним ключом не является способом безопасно изменить уже начатую операцию.

    Граница применимости: Stripe API, повтор POST-запроса с тем же ключом идемпотентности.

  7. Stripe допускает удаление ключей после хранения не менее 24 часов. Если удалённый ключ использовать снова, запрос выполняется как новый; защита от повтора поэтому ограничена сроком сохранения ключа.

    Граница применимости: Stripe API, POST-запросы с ключом идемпотентности; не универсальный срок для других сервисов или методов.

  8. Stripe не сохраняет идемпотентный результат при ошибке проверки входа или конфликте с одновременно выполняющимся запросом, когда выполнение ещё не началось. Такие случаи отличаются от ошибки уже выполнявшейся операции.

    Граница применимости: Stripe API, POST-запросы с ключом идемпотентности: граница начала выполнения и сохранения результата.

Граница терминов

Не путать

Идемпотентная операция Доставка не менее одного раза

Доставка не менее одного раза допускает повтор сообщения. Идемпотентная операция ограничивает эффект такого повтора; сама возможность повторной доставки не делает списание идемпотентным.

Идемпотентная операция Обработка ровно один раз

Идемпотентность описывает эффект повторов одной операции. Обработка ровно один раз требует доказать согласование входной позиции и результата во всей заявленной области, включая внешние действия.

Перед спецификацией

Что проверить

  1. Назовите деловой эффект: создать заказ, задать остаток или списать платёж.
  2. Проверьте, задаёт ли метод или API контракт безопасного повтора этого эффекта.
  3. Для одного намерения сохраняйте один ключ и исходные параметры запроса.
  4. Проверьте срок хранения ключа и процедуру сверки после его истечения.
  5. Отделите сохранённый результат выполнения от ошибки до начала выполнения.
  6. Испытайте потерю ответа после фактического выполнения и одновременные повторы.
  7. Проверяйте деловой результат, не требуя одинакового HTTP-ответа без такого контракта.
Открытые основания

Первоисточники

  • Стандарт1
  • Документация2
  • Первичная спецификация
    HTTP Semantics Internet Engineering Task Force · RFC 9110, June 2022 · проверено

    Определяет stateless HTTP, origin server, intermediaries, target URI и security significance полей authority и Host.

    Утверждения: 01 · 02 · 03 · 04

  • Официальная документация
    Stripe API Reference: Idempotent requests Stripe · справочник Stripe API, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Сверить POST с ключом идемпотентности: параметры, сохранение ответа после начала выполнения и удаление ключей не раньше 24 часов.

    Утверждения: 05 · 06 · 07 · 08

  • Официальная документация
    Apache Kafka 4.0 Design Apache Software Foundation · Apache Kafka 4.0 documentation · проверено

    Определяет log ordering, producer idempotence, delivery semantics и scope exactly-once processing.

Карта знаний

Связанные понятия

Из знания — в навык

Курсы по теме

Подтвердите действие