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 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
- 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы