Доставка не менее одного раза допускает повтор сообщения. Идемпотентная операция ограничивает эффект такого повтора; сама возможность повторной доставки не делает списание идемпотентным.
Идемпотентная операция
Определение
Идемпотентная операция — операция, которую можно повторять без нового изменения состояния: несколько одинаковых запросов дают тот же предполагаемый эффект, что и один. Ответы на повторы при этом могут различаться: одинаковый эффект не требует одинакового ответа.
Также ищут: Idempotent operation · idempotency
Зачем это знать
После потерянного ответа заказ или платёж уже мог выполниться. Безопасность повтора нужно доказать семантикой операции или конкретным контрактом ключа идемпотентности, включая параметры и срок хранения результата.
Карта понятия
Что подтверждено
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
Определяет stateless HTTP, origin server, intermediaries, target URI и security significance полей authority и Host.
- Stripe API Reference: Idempotent requests
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Сверить POST с ключом идемпотентности: параметры, сохранение ответа после начала выполнения и удаление ключей не раньше 24 часов.
- Apache Kafka 4.0 Design
Определяет log ordering, producer idempotence, delivery semantics и scope exactly-once processing.