Розділ 6 · 17 питань

REST HTTP

17 питань і відповідей у розділі REST HTTP.

Ukrainian REST HTTP Вихідний Markdown
Мовні версії: English Russian Ukrainian

Питання цього розділу

  1. Що таке REST?
  2. Що означає Stateless в контексті REST?
  3. Які основні HTTP методи використовуються в REST?
  4. В чому різниця між PUT та PATCH?
  5. Що таке ідемпотентність (idempotency)?
  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?

Навігатор по розділу

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
  • 🎯 Шпаргалка для співбесіди — ключові тези, часті запитання, червоні прапорці, пов’язані теми