Выбор ответа Middle Офлайн и синхронизация обновлено

Идемпотентность при повторной отправке

Вопрос

Синхронизатор отправил создание заказа, ответ потерялся из-за обрыва сети, и запрос ушёл повторно. Как не создать два заказа?

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

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

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

Коротко

Правильный ответ: Клиент генерирует ключ идемпотентности (UUID операции), сервер по нему отдаёт результат первой обработки. В мобильной сети «запрос дошёл, ответ потерялся» обычная ситуация.

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

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

Разбор

В мобильной сети «запрос дошёл, ответ потерялся» обычная ситуация. Ключ идемпотентности, созданный при создании операции и сохранённый в outbox, делает повтор безопасным: сервер видит знакомый ключ и не создаёт дубль. Отказ от повторов теряет данные, удаление дублей на клиенте ненадёжно, а таймаут лишь уменьшает вероятность.

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

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