Выбор ответа Senior Офлайн и хранение обновлено

Повтор офлайн-операций без дублей

Вопрос

Приложение отправило заказ, соединение оборвалось до ответа. Очередь повторила запрос, и на сервере два заказа. Как предотвратить?

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

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

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

Коротко

Правильный ответ: Ключ идемпотентности на каждую операцию: сервер не выполнит повтор дважды. При обрыве клиент не знает, дошёл ли запрос.

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

  1. Не повторять запросы никогда: потерянный заказ лучше, чем двойной
  2. Повторять только через 24 часа, когда первый запрос точно обработан
  3. Ключ идемпотентности на каждую операцию: сервер не выполнит повтор дваждыправильный ответ
  4. Проверять по локальному кешу на клиенте, что заказа ещё нет, и только тогда повторять

Разбор

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

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

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