Выбор ответа Senior Тест-кейсы для API обновлено
Таймаут и повтор при оплате
Вопрос
Клиент отправил оплату, ответ не пришёл из-за таймаута, клиент повторил запрос. Какой результат правильный?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Деньги списаны один раз: по ключу идемпотентности сервер вернёт первый ответ. Таймаут не значит, что операция не выполнилась: сервер мог списать деньги, но ответ потерялся.
Варианты ответа
- Деньги списаны один раз: по ключу идемпотентности сервер вернёт первый ответправильный ответ
- Деньги списаны дважды: это ожидаемо, клиент сам отправил второй запрос
- Сервер отвечает 409 на повтор, и пользователь не знает, прошла ли оплата
- Повтор отклоняется, а клиент выясняет статус оплаты через поддержку
Разбор
Таймаут не значит, что операция не выполнилась: сервер мог списать деньги, но ответ потерялся. Правильная защита: ключ идемпотентности в заголовке, сервер хранит результат по ключу и на повтор возвращает тот же ответ. Сценарий для теста: оборвать соединение после отправки и повторить с тем же ключом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.