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