Praktischer Fall: Eine App zum Bestellen von Essen, während der Bestellung fiel das Internet aus, der Nutzer klickte doppelt, es wurden zwei Bestellungen erstellt. Was ist die Ursache und wie kann man das beheben?
sobes.tech KI
Antwort von AI
Причина создания двух заказов — повторный клик пользователя во время временного отсутствия интернета, из-за чего приложение не получило подтверждение о создании первого заказа и отправило запрос повторно.
Как исправить:
-
Дебаунсинг или блокировка кнопки: После первого клика кнопка "Создать заказ" блокируется до получения ответа от сервера.
-
Идемпотентность на сервере: Сервер должен уметь распознавать повторные запросы и не создавать дубликаты. Например, клиент генерирует уникальный идентификатор заказа (UUID) и отправляет его вместе с запросом. Если сервер видит уже существующий заказ с таким ID, он не создает новый.
-
Обработка ошибок сети: При потере соединения приложение может показывать пользователю сообщение и не отправлять повторный запрос без явного подтверждения.
Пример идемпотентного запроса с UUID:
String orderId = UUID.randomUUID().toString();
// Отправляем orderId вместе с данными заказа
// Сервер проверяет, есть ли заказ с таким orderId
// Если есть — возвращает существующий заказ, иначе создает новый
Таким образом, комбинация клиентской блокировки и серверной идемпотентности решит проблему двойного создания заказов.