REST HTTP
17 питань і відповідей у розділі REST HTTP.
Питання цього розділу
- Що таке REST?
- Що означає Stateless в контексті REST?
- Які основні HTTP методи використовуються в REST?
- В чому різниця між PUT та PATCH?
- Що таке ідемпотентність (idempotency)?
- Які HTTP методи ідемпотентні?
- Чому GET та DELETE ідемпотентні?
- Чи є POST ідемпотентним?
- Які HTTP статус коди ви знаєте?
- В чому різниця між 401 та 403?
- Що таке RESTful API дизайн?
- Як правильно іменувати REST endpoints?
- Чи варто використовувати дієслова в URL?
- Що таке HATEOAS?
- Як організувати версіонування REST API?
- Що таке Content-Type header?
- Що таке Accept header?
Навігатор по розділу
17 питань для підготовки до співбесіди на Middle Java Developer.
📋 Усі питання
| # | Питання | Рівень складності |
|---|---|---|
| 1 | Що таке REST | ⭐ |
| 2 | Що означає Stateless в контексті REST | ⭐ |
| 3 | Які основні HTTP методи використовуються в REST | ⭐ |
| 4 | В чому різниця між PUT та PATCH | ⭐⭐ |
| 5 | Що таке ідемпотентність | ⭐⭐ |
| 6 | Які HTTP методи ідемпотентні | ⭐⭐ |
| 7 | Чому GET та DELETE ідемпотентні | ⭐⭐ |
| 8 | Чи є POST ідемпотентним | ⭐⭐ |
| 9 | Які HTTP статус коди ви знаєте | ⭐⭐ |
| 10 | В чому різниця між 401 та 403 | ⭐⭐ |
| 11 | Що таке RESTful API дизайн | ⭐⭐ |
| 12 | Як правильно іменувати REST endpoints | ⭐⭐ |
| 13 | Чи варто використовувати дієслова в URL | ⭐⭐ |
| 14 | Що таке HATEOAS | ⭐⭐⭐ |
| 15 | Як організувати версіонування REST API | ⭐⭐ |
| 16 | Що таке Content-Type header | ⭐ |
| 17 | Що таке Accept header | ⭐⭐ |
🗺️ Карта залежностей тем
┌──────────────────────────────────────────┐
│ REST ОСНОВИ (1-3) │
│ 1. Що таке REST │
│ 2. Stateless │
│ 3. HTTP методи │
└──────────────────┬───────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌────────────────────┐
│ IDEMPOTENCY │ │ STATUS CODES │ │ API DESIGN │
│ (4-8) │ │ (9-10) │ │ (11-15) │
│ 4. PUT vs │ │ 9. Статус-коди │ │ 11. RESTful дизайн │
│ PATCH │ │ 10. 401 vs 403 │ │ 12. Endpoints │
│ 5. Ідемпотент. │ │ │ │ 13. Дієслова в URL │
│ 6. Які методи │ │ │ │ 14. HATEOAS │
│ 7. GET/DELETE │ │ │ │ 15. Версіонування │
│ 8. POST │ │ │ │ │
└───────────────┘ └────────────────┘ └────────┬───────────┘
│
▼
┌────────────────────┐
│ HEADERS (16-17) │
│ 16. Content-Type │
│ 17. Accept │
└────────────────────┘
🎯 Рекомендований порядок вивчення
🟢 Рівень Junior (тижні 1-2)
| Крок | Тема | Файли | Мета |
|---|---|---|---|
| 1 | REST база | Q1, Q2 | Що таке REST, Stateless |
| 2 | HTTP методи | Q3 | GET, POST, PUT, PATCH, DELETE |
| 3 | Статус-коди | Q9, Q10 | 2xx, 4xx, 5xx, 401 vs 403 |
| 4 | Headers | Q16, Q17 | Content-Type, Accept |
🟡 Рівень Middle (тижні 3-4)
| Крок | Тема | Файли | Мета |
|---|---|---|---|
| 1 | Ідемпотентність | Q5, Q6, Q7, Q8 | Що, які методи, чому |
| 2 | PUT vs PATCH | Q4 | Повна заміна vs часткова |
| 3 | API дизайн | Q11, Q12 | Ресурси, іменування, Richardson Maturity |
| 4 | Дієслова та HATEOAS | Q13, Q14 | Коли допустимі, що таке HATEOAS |
| 5 | Версіонування | Q15 | URL, headers, sunset policy |
🔴 Рівень Senior (тижні 5-6)
| Крок | Тема | Файли | Мета |
|---|---|---|---|
| 1 | Richardson Maturity Model | Q11 (Senior) | Levels 0-3, коли REST надлишковий |
| 2 | Idempotency-Key pattern | Q8 (Senior) | Retry safety, distributed systems |
| 3 | HATEOAS trade-offs | Q14 (Senior) | Affordances, payload overhead, when to skip |
| 4 | Content negotiation | Q16, Q17 (Senior) | q-values, graceful degradation, MIME types |
| 5 | API versioning strategies | Q15 (Senior) | Expand & Contract, canary releases, deprecation |
🔗 Ключові зв’язки між темами
Тема: Основи REST
Q1 (REST) → Q2 (Stateless) → Q3 (HTTP методи)
Ключові зв’язки:
- Q1 ↔ Q2: Stateless — одне з 6 обмежень REST
- Q2 ↔ Q9: Stateless вимагає JWT/token у кожному запиті → статус-коди 401/403
Тема: Ідемпотентність
Q5 (Ідемпотентність) → Q6 (Які методи) → Q7 (GET/DELETE) → Q8 (POST)
Ключові зв’язки:
- Q5 ↔ Q6: Safe методи завжди ідемпотентні
- Q7 ↔ Q8: GET/DELETE ідемпотентні, POST — ні (але можна зробити через Idempotency-Key)
Тема: Дизайн API
Q11 (RESTful дизайн) → Q12 (Endpoints) → Q13 (Дієслова) → Q14 (HATEOAS) → Q15 (Версіонування)
Ключові зв’язки:
- Q11 ↔ Q12: Ресурсний підхід → множина, nouns не verbs
- Q12 ↔ Q13: Дієслова допустимі для складних операцій (cancel, approve)
- Q14 ↔ Q15: HATEOAS допомагає з версіонуванням (клієнт слідує за посиланнями, не хардкодить URL)
🎓 Шпаргалка: що знати для кожного рівня
🟢 Junior
- REST = набір обмежень (Stateless, Uniform Interface, Resources)
- GET = читати, POST = створити, PUT = замінити, PATCH = оновити частину, DELETE = видалити
- 200 = OK, 201 = Created, 400 = Bad Request, 401 = Unauthenticated, 403 = Forbidden, 404 = Not Found, 500 = Server Error
- Stateless = сервер не пам’ятає клієнта між запитами
🟡 Middle
- Ідемпотентність: повторний виклик = той самий результат. GET/PUT/DELETE ідемпотентні, POST — ні
- PUT замінює ресурс цілком, PATCH — частково
- 401 = хто ви? (немає токена), 403 = не можна (немає прав)
- Richardson Maturity Model: Level 0 (RPC) → Level 1 (Resources) → Level 2 (HTTP methods) → Level 3 (HATEOAS)
- Content-Type = формат тіла запиту, Accept = бажаний формат відповіді
🔴 Senior
- HATEOAS affordances: сервер підказує клієнту доступні дії через посилання
- Idempotency-Key: UUID у header для безпечного retry POST-запитів
- Media Type Versioning ближче до духу REST, але URL versioning практичніше
- Expand & Contract: стратегія міграції без downtime
- Protobuf у 3-10x швидше JSON, але складніше у налагодженні
- Negative Caching: кешування 404/403 для захисту від brute-force
📝 Формат кожного файлу
Кожен файл містить:
- 🟢 Junior Level — базове розуміння, прості аналогії, приклади
- 🟡 Middle Level — внутрішня організація, типові помилки, практичні приклади
- 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
- 🎯 Шпаргалка для співбесіди — ключові тези, часті запитання, червоні прапорці, пов’язані теми