Сеть нестабильна. Клиент отправляет POST /payments, списание происходит, но ответ падает по таймауту. Пользователь нажимает «Оплатить» еще раз. Без обработки идемпотентности вы спишете деньги дважды.
Стандартное решение в бэкенд-архитектуре — Idempotency-Key в заголовках:
sequenceDiagram
Client->>Backend: POST /pay (Header: Idempotency-Key: uuid-123)
Backend->>Redis: SETNX idempotency:uuid-123 "processing"
Backend->>DB: Выполняем платеж
Backend->>Redis: Сохраняем ответ сервера в Кэш
Backend->>Client: 200 OK (Payment success)