Idempotency vs safety на собеседовании системного аналитика

Практика по теме статьи · без регистрации

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

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/42

Crawlers / prefetch trigger random GETs — should be safe.

Retries. Idempotent ops can retry без worry. POST may create duplicate — retry hazardous.

Готовишься к собесу системного аналитика?
827 вопросов: REST, UML, OAuth, ERD, требования. Тренируйся в браузере
Тренировать SA в браузере

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

Связанные темы

FAQ

Это официальная информация?

Нет. Статья основана на RFC 9110 (HTTP Semantics).


Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.