Выбор ответа Middle Офлайн и синхронизация обновлено
Идемпотентность при повторной отправке
Вопрос
Синхронизатор отправил создание заказа, ответ потерялся из-за обрыва сети, и запрос ушёл повторно. Как не создать два заказа?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Клиент генерирует ключ идемпотентности (UUID операции), сервер по нему отдаёт результат первой обработки. В мобильной сети «запрос дошёл, ответ потерялся» обычная ситуация.
Варианты ответа
- Не повторять запросы на создание: если ответ потерян, считать заказ созданным и ждать синхронизации
- Отправлять запрос дважды намеренно и удалять лишний заказ на клиенте после следующей синхронизации
- Увеличить таймаут до минуты, чтобы ответ успевал прийти даже на медленной сети и повтор не требовался
- Клиент генерирует ключ идемпотентности (UUID операции), сервер по нему отдаёт результат первой обработкиправильный ответ
Разбор
В мобильной сети «запрос дошёл, ответ потерялся» обычная ситуация. Ключ идемпотентности, созданный при создании операции и сохранённый в outbox, делает повтор безопасным: сервер видит знакомый ключ и не создаёт дубль. Отказ от повторов теряет данные, удаление дублей на клиенте ненадёжно, а таймаут лишь уменьшает вероятность.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.