Повторный POST /orders создал второй заказ
Мобильное приложение отправило POST /orders, не дождалось ответа по таймауту сети и повторило запрос. В базе появилось два одинаковых заказа, клиент оплатил оба.
Что делает повторную отправку такого запроса безопасной?
- Отключить автоматические ретраи в мобильном приложении: при единственной попытке отправки дублей не возникает по построению
- Заменить POST на GET: по спецификации GET безопасен, состояние не меняет и потому не создаёт дублей при повторе
- Отлавливать дубли эвристикой на сервере: считать повтором заказ того же клиента с той же суммой, созданный в течение минуты
- Клиент передаёт ключ идемпотентности, сервер сохраняет результат по этому ключу и на повтор возвращает уже созданный заказ
