Idempotency key на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем спрашивают на собесе SA
Idempotency — основа safe APIs. На собесе SA: «как сделать POST идемпотентным», «что в Idempotency-Key».
Идея
POST по semantic non-idempotent — может create row at каждый retry.
Idempotency key — client-generated unique ID, sent with request. Server detects duplicate retry, returns same response.
POST /payments
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
Body: {"amount": 100, "card": "..."}
→ 201 Created, payment ID = 42
# retry с тем же key
POST /payments
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
→ 201 Created, payment ID = 42 (same response, не new payment)Header convention
Idempotency-Key — стандарт de facto (Stripe popularized).
Format. UUID typically. Любая unique строка.
Generation. Client-side. Один key per logical operation. Persisted in client storage пока not confirmed.
Server-side dedupe
CREATE TABLE idempotency_keys (
key TEXT PRIMARY KEY,
user_id BIGINT,
request_hash TEXT, -- хеш request body
response JSON, -- saved response
status_code INT,
created_at TIMESTAMP
);Алгоритм:
- Get key from header.
- SELECT from idempotency_keys.
- If exists:
- Compare request_hash. Если разный — error 422 «Idempotency key reused with different body».
- Return saved response.
- If not exists:
- Process request.
- INSERT key + response.
- Return.
Race condition. Concurrent requests с тем же key — нужен lock. SELECT FOR UPDATE или unique constraint check.
TTL и cleanup
Идемpoпotency keys накапливаются. TTL — 24h-7d typically.
DELETE FROM idempotency_keys WHERE created_at < NOW() - INTERVAL '7 days';После TTL — same key может быть переиспользован (для another logical op).
Применение
Payment APIs. Stripe, PayPal — обязательно.
Order creation. Чтобы pet retry не создавал second order.
Webhooks. Receivers идемпотентны через key (или event ID).
Bank transfers. Critical — двойное списание = catastrophe.
Связанные темы
- Идемпотентность API для SA
- REST API на собесе SA
- Circuit Breaker для SA
- 2PC vs Saga для SA
- Подготовка к собесу системного аналитика
FAQ
Это официальная информация?
Нет. Статья основана на конвенциях Stripe / Square / payment industry.
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.