Доставка не менее одного раза допускает повтор сообщения. Идемпотентная операция ограничивает эффект такого повтора; сама возможность повторной доставки не делает списание идемпотентным.
Почему это важно
После потерянного ответа заказ или платёж уже мог выполниться. Безопасность повтора нужно доказать семантикой операции или конкретным контрактом ключа идемпотентности, включая параметры и срок хранения результата.
Что подтверждено
RFC 9110 называет метод идемпотентным, когда предполагаемый эффект нескольких одинаковых запросов на сервере совпадает с эффектом одного запроса.
Граница применимости: Семантика методов HTTP; речь об эффекте, который запрашивает клиент.
Идемпотентность не требует одинаковых ответов на каждый повтор. Сервер может отдельно журналировать запросы и выполнять иные побочные действия, не входящие в запрошенный идемпотентный эффект.
Граница применимости: RFC 9110, границы предполагаемого эффекта HTTP-запроса; это не обещание отсутствия любых повторных действий.
Безопасные методы HTTP, а также PUT и DELETE, определены как идемпотентные. POST не получает это свойство только из имени метода; конкретный сервис может отдельно предоставить контракт безопасного повтора.
Граница применимости: RFC 9110, стандартные свойства методов; реализация обязана соблюдать заявленную семантику.
По RFC 9110 автоматический повтор запроса с неидемпотентным методом допускается, если клиент знает об идемпотентности фактической операции либо может установить, что исходный запрос не был применён. Достаточно одного из этих оснований; само отсутствие ответа не даёт ни одного.
Граница применимости: Рекомендация RFC 9110 для автоматических повторов HTTP после сбоя соединения.
Stripe сохраняет код и тело первого ответа для ключа идемпотентности после начала выполнения запроса и возвращает этот результат при повторе, в том числе когда сохранённый ответ был ошибкой 500.
Граница применимости: Stripe API, POST-запросы с ключом идемпотентности; не общее свойство HTTP и не гарантия успеха платежа.
Stripe сравнивает параметры запроса с исходными параметрами того же ключа и отклоняет несовпадение. Повтор другого намерения под прежним ключом не является способом безопасно изменить уже начатую операцию.
Граница применимости: Stripe API, повтор POST-запроса с тем же ключом идемпотентности.
Stripe допускает удаление ключей после хранения не менее 24 часов. Если удалённый ключ использовать снова, запрос выполняется как новый; защита от повтора поэтому ограничена сроком сохранения ключа.
Граница применимости: Stripe API, POST-запросы с ключом идемпотентности; не универсальный срок для других сервисов или методов.
Stripe не сохраняет идемпотентный результат при ошибке проверки входа или конфликте с одновременно выполняющимся запросом, когда выполнение ещё не началось. Такие случаи отличаются от ошибки уже выполнявшейся операции.
Граница применимости: Stripe API, POST-запросы с ключом идемпотентности: граница начала выполнения и сохранения результата.
Не путать
Идемпотентность описывает эффект повторов одной операции. Обработка ровно один раз требует доказать согласование входной позиции и результата во всей заявленной области, включая внешние действия.
Что проверить
- Назовите деловой эффект: создать заказ, задать остаток или списать платёж.
- Проверьте, задаёт ли метод или API контракт безопасного повтора этого эффекта.
- Для одного намерения сохраняйте один ключ и исходные параметры запроса.
- Проверьте срок хранения ключа и процедуру сверки после его истечения.
- Отделите сохранённый результат выполнения от ошибки до начала выполнения.
- Испытайте потерю ответа после фактического выполнения и одновременные повторы.
- Проверяйте деловой результат, не требуя одинакового 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.
Открыть первоисточник