Практический кейс: приложение для заказа еды, при создании заказа моргнул интернет, пользователь кликнул дважды, создалось два заказа. В чем причина и как исправить?
Ответ от нейросети
sobes.tech AI
Причина создания двух заказов — повторный клик пользователя во время временного отсутствия интернета, из-за чего приложение не получило подтверждение о создании первого заказа и отправило запрос повторно.
Как исправить:
-
Дебаунсинг или блокировка кнопки: После первого клика кнопка "Создать заказ" блокируется до получения ответа от сервера.
-
Идемпотентность на сервере: Сервер должен уметь распознавать повторные запросы и не создавать дубликаты. Например, клиент генерирует уникальный идентификатор заказа (UUID) и отправляет его вместе с запросом. Если сервер видит уже существующий заказ с таким ID, он не создает новый.
-
Обработка ошибок сети: При потере соединения приложение может показывать пользователю сообщение и не отправлять повторный запрос без явного подтверждения.
Пример идемпотентного запроса с UUID:
String orderId = UUID.randomUUID().toString();
// Отправляем orderId вместе с данными заказа
// Сервер проверяет, есть ли заказ с таким orderId
// Если есть — возвращает существующий заказ, иначе создает новый
Таким образом, комбинация клиентской блокировки и серверной идемпотентности решит проблему двойного создания заказов.