Idempotency vs safety на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Definitions
Safe. Не modifies state. GET, HEAD, OPTIONS.
Idempotent. Multiple calls — same result as one. GET, PUT, DELETE.
Cacheable. Can be cached. GET, HEAD typically.
Safe → idempotent (но не vice versa).
HTTP methods table
| Method | Safe | Idempotent | Cacheable |
|---|---|---|---|
| GET | ✅ | ✅ | ✅ |
| HEAD | ✅ | ✅ | ✅ |
| OPTIONS | ✅ | ✅ | ❌ |
| PUT | ❌ | ✅ | ❌ |
| DELETE | ❌ | ✅ | ❌ |
| POST | ❌ | ❌ | rarely |
| PATCH | ❌ | ❌ (depends) | ❌ |
Why matters
Browsers / proxies / clients assume GET safe. Action-on-GET — anti-pattern.
Bad: GET /delete-user?id=42 ← deletes!
Good: DELETE /users/42Crawlers / prefetch trigger random GETs — should be safe.
Retries. Idempotent ops can retry без worry. POST may create duplicate — retry hazardous.
Caveats
PUT idempotent. Multiple PUT /users/42 {name: "Alice"} — same result. But race conditions могут create issues.
DELETE idempotent. First call returns 200. Second 404. Different responses, но same final state — semantically idempotent.
POST не idempotent BY DEFAULT. Make idempotent через Idempotency-Key header — server dedupes.
PATCH depends. PATCH {amount: 100} — idempotent (set value). PATCH {amount: +10} — не (each call adds).
Связанные темы
- HTTP методы и коды для SA
- Идемпотентность API для SA
- Idempotency key для SA
- REST API для SA
- Подготовка к собесу системного аналитика
FAQ
Это официальная информация?
Нет. Статья основана на RFC 9110 (HTTP Semantics).
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.