Идемпотентность POST: платежи и заказы без двойного списания
Ключ идемпотентности, повторы из-за таймаутов и почему «просто проверить в БД» недостаточно при гонках.
Клиенты и прокси могут повторить POST после обрыва соединения; без идемпотентного ключа сервер дважды создаст заказ или спишет средства.
Паттерн: клиент генерирует UUID запроса, сервер сохраняет результат по ключу в транзакции с уникальным ограничением и возвращает тот же ответ при повторе.
- Idempotent requests — Stripe API — Как ведут себя повторы с Idempotency-Key.
- Idempotent method — HTTP semantics (MDN glossary) — Связь с HTTP-методами.
TTL и очистка
Храните ключи ограниченное время (сутки–неделя) и архивируйте для расследований мошенничества отдельно.
Логируйте конфликты ключа: это сигнал либо бага клиента, либо атаки повтором.