Выбор ответа Middle Консистентность и CAP спрашивают часто обновлено
Повтор платежа после таймаута
Вопрос
Клиент отправил запрос на оплату, получил таймаут и повторил запрос. Как не списать деньги дважды?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Idempotency-Key: сервер отдаёт сохранённый результат. Ключ идемпотентности стандартная практика платёжных API: сервер атомарно связывает ключ с операцией и на повтор отдаёт сохранённый результат.
Варианты ответа
- Idempotency-Key: сервер отдаёт сохранённый результатправильный ответ
- Запретить клиентам повторять запросы после таймаута
- Увеличить таймаут до минуты, чтобы ответ успевал дойти
- Сделать оплату через GET, ведь GET идемпотентен
Разбор
Ключ идемпотентности стандартная практика платёжных API: сервер атомарно связывает ключ с операцией и на повтор отдаёт сохранённый результат. Запрет повторов делает систему ненадёжной, ведь первый запрос мог не дойти. Долгий таймаут уменьшит, но не устранит проблему. GET не делает операцию идемпотентной сам по себе и для изменений не предназначен.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.