Выбор ответа Senior Тест-кейсы для API обновлено

Таймаут и повтор при оплате

Вопрос

Клиент отправил оплату, ответ не пришёл из-за таймаута, клиент повторил запрос. Какой результат правильный?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Деньги списаны один раз: по ключу идемпотентности сервер вернёт первый ответ. Таймаут не значит, что операция не выполнилась: сервер мог списать деньги, но ответ потерялся.

Варианты ответа

  1. Деньги списаны один раз: по ключу идемпотентности сервер вернёт первый ответправильный ответ
  2. Деньги списаны дважды: это ожидаемо, клиент сам отправил второй запрос
  3. Сервер отвечает 409 на повтор, и пользователь не знает, прошла ли оплата
  4. Повтор отклоняется, а клиент выясняет статус оплаты через поддержку

Разбор

Таймаут не значит, что операция не выполнилась: сервер мог списать деньги, но ответ потерялся. Правильная защита: ключ идемпотентности в заголовке, сервер хранит результат по ключу и на повтор возвращает тот же ответ. Сценарий для теста: оборвать соединение после отправки и повторить с тем же ключом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме