Раздел 6 · 17 вопросов

REST HTTP

17 вопросов и ответов в разделе REST HTTP.

Russian 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 methods всегда идемпотентны
  • 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: стратегия миграции без даунтайма
  • Protobuf в 3-10x быстрее JSON, но сложнее в отладке
  • Negative Caching: кеширование 404/403 для защиты от brute-force

📝 Формат каждого файла

Каждый файл содержит:

  • 🟢 Junior Level — базовое понимание, простые аналогии, примеры
  • 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
  • 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
  • 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы