Повтор запроса после таймаута привёл к двойному списанию
Мобильное приложение отправляет POST /api/v1/payments. Ответ не приходит за таймаут (сеть у клиента нестабильна), приложение автоматически повторяет запрос.
В итоге у клиента два списания: первый запрос на сервере успешно обработался, ответ просто не дошёл.
Что нужно заложить в контракт, чтобы это не повторялось?
- Увеличить таймаут приложения и полностью запретить автоматические повторы запросов на стороне клиента
- Перед каждым `POST /payments` вызывать `GET /payments` и проверять, нет ли уже такого платежа за последние минуты
- Заменить POST на PUT: PUT идемпотентен по определению, поэтому дубли платежей исчезнут сами
- Передавать ключ идемпотентности: по повторному запросу с тем же ключом сервер вернёт результат первой операции
