Идемпотентность
Идемпотентность — свойство операции: многократное её выполнение приводит к тому же результату, что и однократное.
Мотивация
В distributed system запрос может пропасть или прийти дважды. Retry — стандартный ответ на timeout. Без идемпотентности retry может создать дубликат платежа/ставки. Особенно критично для платежей и wallet-операций.
Реализация
Idempotency-Key заголовок (Stripe-style): клиент генерирует UUID, сервер сохраняет пары (key → response) в TTL кеше 24-48 часов. Повторный запрос с тем же key возвращает сохранённый ответ без повторного выполнения. Основано на RFC draft-ietf-httpapi-idempotency-key.
HTTP-семантика
GET, PUT, DELETE — идемпотентны по семантике. POST — не идемпотентен по умолчанию, требует ключа. Retry POST без ключа — потенциально опасно. Клиенты и proxies должны знать разницу для safe retry.
iGaming-применение
Депозит: Idempotency-Key от клиента, retry безопасен. Ставка: bet_id из UI как ключ, повтор из-за network glitch не создаст двойную ставку. Withdrawal: обязательно (двойное списание с провайдера — регуляторный инцидент). Провайдеры игр обычно требуют idempotent API.