Что это
Аудитор ключей идемпотентности. Он прогоняет запросы из лога по правилам, которым следует правильный API, и записывает каждый как первую запись, безопасный повтор или проблему.
Аудит идемпотентности для платёжных API и API заказов
Idempotency Ledger читает логи запросов, записывает каждую операцию записи под её ключом идемпотентности и показывает, где повтор создал второе списание, второй заказ или вторую выплату. Для каждой проблемы указаны сумма под угрозой и способ исправления.
Списания по ключамNo. 0417
| Время | Ключ | Сумма |
|---|---|---|
| 10:00:00 | ik_7f3a | 49.99 |
| 10:00:03 | ik_7f3a | 49.99 |
| 10:05:00 | ik_c044 | 89.00 |
| 10:05:00 | ik_c044 | 89.00 |
| 10:12:00 | ik_f611 | 9.99 |
Лишние списания+89.00 EUR
Аудитор ключей идемпотентности. Он прогоняет запросы из лога по правилам, которым следует правильный API, и записывает каждый как первую запись, безопасный повтор или проблему.
Для бэкенд и платёжных инженеров, SRE и руководителей поддержки, которым нужно понять, действительно ли с клиента списали деньги дважды и почему.
Повторы запросов нормальны, но повтор, который снова выполняет работу, создаёт реальные денежные проблемы. В логах они теряются среди тысяч строк. Книга поднимает их наверх вместе с итогами.
Вставьте или откройте выгрузку лога. Ничего не загружается на сервер: разбор и проверки идут на этой странице.
Один запрос на строку, массив JSON или CSV со строкой заголовков.
Поля находятся по названию: time или ts, method, path или url, status, ключ идемпотентности, идентификатор созданного объекта, например charge_id или order_id, amount, currency и customer. Вложенный JSON и заголовки Idempotency-Key тоже поддерживаются.
Вставьте лог и нажмите «Проверить лог» или загрузите пример, чтобы увидеть все виды находок.
Каждый повторяющийся ключ проверяется по порядку времени и сравнивается с тем, что должен был сделать правильный сервер.
Тот же ключ, тот же запрос и два разных созданных идентификатора. Сервер выполнил работу дважды. Это самое дорогое.
Две копии пришли в пределах двух секунд, и обе прошли успешно. Часто бывает при двойном клике и агрессивных повторах клиента.
Старый ключ пришёл с новыми параметрами. Правильный сервер отказывает с кодом 422. Если принять такой запрос, ошибки клиента останутся скрытыми.
Ответ 5xx, после которого объект всё равно создан, а затем повтор, создавший ещё один. Видно только если в логах есть идентификаторы.
Записи без ключа нельзя дедуплицировать. Две одинаковые записи подряд за короткое время отмечаются как дубль.
Ключ, вернувшийся после окна, считается новой работой. Выберите окно, как на вашем сервере.
Возьмите запросы к одному эндпоинту или сервису за период из логов шлюза, балансировщика или приложения.
Подходят строки JSON, массив JSON, CSV с заголовками или обычные строки с парами key=value.
Укажите, сколько ваш сервер хранит ключи. API в стиле Stripe хранят их 24 часа.
Проблемы идут первыми вместе с суммой под угрозой. Откройте ключ, чтобы увидеть каждую строку и исправление, затем скопируйте отчёт или скачайте CSV.
Уникальное значение, которое клиент отправляет вместе с запросом на запись. Если тот же запрос придёт снова с тем же ключом, сервер вернёт первый результат, а не выполнит работу второй раз.
Это значит, что вторая копия пришла, пока первая ещё выполнялась, и сервер отказался запускать их параллельно. Клиент может повторить позже и получить сохранённый результат.
Если сервер принимает новые параметры под старым ключом, значит у клиента есть ошибка с повторным использованием ключей. В следующий раз она создаст неверное списание, похожее на повтор.
С ними проверка становится точной. Записывайте в лог идентификатор объекта, созданного каждой записью, например charge_id или order_id.