Если API не поддерживает идемпотентность создания заказа, один пользовательский сценарий может создать два одинаковых заказа. Особенно часто это видно при таймаутах и повторной отправке.
Дубли заказов ломают склад, оплату, уведомления и аналитику. Клиент может получить два списания или два подтверждения.
Коротко: нужно ввести idempotency key и безопасную обработку повторных запросов.Почему возникает проблема
Клиент или frontend может повторить запрос, если не получил ответ. Без уникального ключа backend не понимает, что это повтор той же операции, а не новый заказ.
Что проверить сначала
- есть ли уникальный ключ операции
- что происходит при повторе POST-запроса
- как обрабатывается таймаут оплаты
- нет ли двойного клика в интерфейсе
- есть ли уникальные ограничения в базе
Как я решаю такую задачу
Я проектирую создание заказа как операцию, которую можно безопасно повторить без создания дублей.
- определяю ключ идемпотентности
- добавляю хранение результата операции
- ставлю ограничения в базе
- обрабатываю retry и таймауты
- проверяю двойную отправку формы
Что подготовить для оценки
- ссылку на страницу, панель или систему
- что именно должно происходить в норме
- пример ошибки или скриншот
- когда проблема появилась
- тестовый доступ без лишних прав, если он нужен
Каким должен быть результат
Повторный запрос с тем же ключом должен возвращать тот же заказ, а не создавать новый.
Чего лучше не делать
Не пытайтесь решать дубли только блокировкой кнопки. Backend все равно должен быть устойчивым к повторным запросам.
FAQ
Можно ли исправить без полной переделки?
Чаще всего да. Я сначала ищу точную причину сбоя и предлагаю минимальную правку, которая не ломает рабочую часть проекта.
Что нужно прислать для оценки?
Нужны ссылка или описание системы, пример ошибки, время появления проблемы и доступ к той части, где можно безопасно проверить причину.
Как понять, что задача решена?
Должен быть повторяемый тест: до правки ошибка воспроизводится, после правки сценарий проходит стабильно и результат можно проверить без догадок.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Пришлите ссылку, пример ошибки и коротко опишите, как должно работать. Я посмотрю задачу, предложу план и скажу, какие доступы понадобятся.
Итог
Идемпотентность API защищает заказы от дублей при таймаутах, retry и нестабильной связи.