Выбор ответа Middle Консистентность и CAP спрашивают часто обновлено

Повтор платежа после таймаута

Вопрос

Клиент отправил запрос на оплату, получил таймаут и повторил запрос. Как не списать деньги дважды?

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

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

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

Коротко

Правильный ответ: Idempotency-Key: сервер отдаёт сохранённый результат. Ключ идемпотентности стандартная практика платёжных API: сервер атомарно связывает ключ с операцией и на повтор отдаёт сохранённый результат.

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

  1. Idempotency-Key: сервер отдаёт сохранённый результатправильный ответ
  2. Запретить клиентам повторять запросы после таймаута
  3. Увеличить таймаут до минуты, чтобы ответ успевал дойти
  4. Сделать оплату через GET, ведь GET идемпотентен

Разбор

Ключ идемпотентности стандартная практика платёжных API: сервер атомарно связывает ключ с операцией и на повтор отдаёт сохранённый результат. Запрет повторов делает систему ненадёжной, ведь первый запрос мог не дойти. Долгий таймаут уменьшит, но не устранит проблему. GET не делает операцию идемпотентной сам по себе и для изменений не предназначен.

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

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