Идемпотентность

Идемпотентность — свойство операции: многократное её выполнение приводит к тому же результату, что и однократное.

Мотивация

В 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.