Повтор платёжного запроса после таймаута создал второй платёж: что проверять в API
Мобильный клиент отправил POST /api/v1/payments, не дождался ответа по таймауту сети и повторил тот же запрос. В базе появились два платежа на одну сумму, с карты списано дважды.
Что это и как строить проверку?
- Корректное поведение: сервер обязан обработать каждый пришедший запрос и создать по нему платёж
- Дефект клиента: интерфейс должен блокировать кнопку после первого нажатия и не давать отправить второй запрос
- Нарушение идемпотентности: повтор с тем же ключом идемпотентности должен вернуть уже созданный платёж, а не создать новый
- Дефект теста: между повторами нужна пауза в несколько секунд, тогда дубли платежей не возникнут
