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

Дубли заказов ломают склад, оплату, уведомления и аналитику. Клиент может получить два списания или два подтверждения.

Коротко: нужно ввести idempotency key и безопасную обработку повторных запросов.

Почему возникает проблема

Клиент или frontend может повторить запрос, если не получил ответ. Без уникального ключа backend не понимает, что это повтор той же операции, а не новый заказ.

Что проверить сначала

  • есть ли уникальный ключ операции
  • что происходит при повторе POST-запроса
  • как обрабатывается таймаут оплаты
  • нет ли двойного клика в интерфейсе
  • есть ли уникальные ограничения в базе

Как я решаю такую задачу

Я проектирую создание заказа как операцию, которую можно безопасно повторить без создания дублей.

  • определяю ключ идемпотентности
  • добавляю хранение результата операции
  • ставлю ограничения в базе
  • обрабатываю retry и таймауты
  • проверяю двойную отправку формы

Что подготовить для оценки

  • ссылку на страницу, панель или систему
  • что именно должно происходить в норме
  • пример ошибки или скриншот
  • когда проблема появилась
  • тестовый доступ без лишних прав, если он нужен

Каким должен быть результат

Повторный запрос с тем же ключом должен возвращать тот же заказ, а не создавать новый.

Чего лучше не делать

Не пытайтесь решать дубли только блокировкой кнопки. Backend все равно должен быть устойчивым к повторным запросам.

FAQ

Можно ли исправить без полной переделки?

Чаще всего да. Я сначала ищу точную причину сбоя и предлагаю минимальную правку, которая не ломает рабочую часть проекта.

Что нужно прислать для оценки?

Нужны ссылка или описание системы, пример ошибки, время появления проблемы и доступ к той части, где можно безопасно проверить причину.

Как понять, что задача решена?

Должен быть повторяемый тест: до правки ошибка воспроизводится, после правки сценарий проходит стабильно и результат можно проверить без догадок.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Пришлите ссылку, пример ошибки и коротко опишите, как должно работать. Я посмотрю задачу, предложу план и скажу, какие доступы понадобятся.

Итог

Идемпотентность API защищает заказы от дублей при таймаутах, retry и нестабильной связи.