Praktičen primer: aplikacija za naročanje hrane, med ustvarjanjem naročila je padel internet, uporabnik je kliknil dvakrat, ustvarjeni sta dve naročili. Kakšen je razlog in kako to popraviti?
sobes.tech AI
Odpoveď od AI
Причина создания двух заказов — повторный клик пользователя во время временного отсутствия интернета, из-за чего приложение не получило подтверждение о создании первого заказа и отправило запрос повторно.
Как исправить:
-
Дебаунсинг или блокировка кнопки: После первого клика кнопка "Создать заказ" блокируется до получения ответа от сервера.
-
Идемпотентность на сервере: Сервер должен уметь распознавать повторные запросы и не создавать дубликаты. Например, клиент генерирует уникальный идентификатор заказа (UUID) и отправляет его вместе с запросом. Если сервер видит уже существующий заказ с таким ID, он не создает новый.
-
Обработка ошибок сети: При потере соединения приложение может показывать пользователю сообщение и не отправлять повторный запрос без явного подтверждения.
Пример идемпотентного запроса с UUID:
String orderId = UUID.randomUUID().toString();
// Отправляем orderId вместе с данными заказа
// Сервер проверяет, есть ли заказ с таким orderId
// Если есть — возвращает существующий заказ, иначе создает новый
Таким образом, комбинация клиентской блокировки и серверной идемпотентности решит проблему двойного создания заказов.