Sobes.tech
Middle

Praktijkvoorbeeld: een app voor het bestellen van eten, tijdens het maken van de bestelling viel het internet uit, de gebruiker klikte twee keer, er werden twee bestellingen aangemaakt. Wat is de oorzaak en hoe los je dat op?

sobes.tech AI

Antwoord van AI

Причина создания двух заказов — повторный клик пользователя во время временного отсутствия интернета, из-за чего приложение не получило подтверждение о создании первого заказа и отправило запрос повторно.

Как исправить:

  1. Дебаунсинг или блокировка кнопки: После первого клика кнопка "Создать заказ" блокируется до получения ответа от сервера.

  2. Идемпотентность на сервере: Сервер должен уметь распознавать повторные запросы и не создавать дубликаты. Например, клиент генерирует уникальный идентификатор заказа (UUID) и отправляет его вместе с запросом. Если сервер видит уже существующий заказ с таким ID, он не создает новый.

  3. Обработка ошибок сети: При потере соединения приложение может показывать пользователю сообщение и не отправлять повторный запрос без явного подтверждения.

Пример идемпотентного запроса с UUID:

String orderId = UUID.randomUUID().toString();
// Отправляем orderId вместе с данными заказа
// Сервер проверяет, есть ли заказ с таким orderId
// Если есть — возвращает существующий заказ, иначе создает новый

Таким образом, комбинация клиентской блокировки и серверной идемпотентности решит проблему двойного создания заказов.