Распределённые данные · проверено по источникам

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

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

Также ищут: 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-ответа без такого контракта.
Открытые основания

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

  • Первичная спецификация

    HTTP Semantics

    Internet Engineering Task Force · RFC 9110, June 2022

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

    Открыть первоисточник
  • Официальная документация

    Stripe API Reference: Idempotent requests

    Stripe · справочник Stripe API, страница открыта 7 сентября 2026 года

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

    Открыть первоисточник
  • Официальная документация

    Apache Kafka 4.0 Design

    Apache Software Foundation · Apache Kafka 4.0 documentation

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

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие