← Назад к вопросам

Что такое RESTful принципы?

1.2 Junior🔥 251 комментариев
#API и интеграции#Архитектура систем

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

RESTful принципы

REST (Representational State Transfer) — это архитектурный стиль для разработки веб-сервисов, предложенный Роем Филдингом в 2000 году. Это не протокол и не стандарт, а набор принципов и ограничений для проектирования API. Большинство современных веб-сервисов используют REST или претендуют на это.

Что такое RESTful API

RESTful API — это API, который следует принципам REST для работы через HTTP. Вместо вызова функций (как в RPC), вы манипулируете ресурсами (представлениями состояния).

6 принципов REST архитектуры

1. Client-Server (Клиент-Сервер)

  • Клиент и сервер полностью разделены и независимы
  • Клиент может быть веб-браузером, мобильным приложением, другим сервисом
  • Сервер может быть заменён другой реализацией без изменения клиента

2. Statelessness (Отсутствие состояния)

Это самый важный принцип. Сервер НЕ должен хранить информацию о клиенте между запросами:

  • Каждый запрос содержит ВСЮ необходимую информацию
  • Сервер не должен помнить предыдущие запросы этого клиента
  • Используются токены (JWT) для аутентификации, а не сессии

Преимущества:

  • Легче масштабировать (можно использовать несколько серверов)
  • Проще кэшировать
  • Проще восстанавливаться от сбоев

3. Uniform Interface (Единообразный интерфейс)

Все операции должны быть консистентны и предсказуемы:

  • Идентификация ресурсов — каждый ресурс имеет уникальный ID (URI)

    /users/123
    /posts/456/comments/789
    
  • Манипуляция через представления — клиент получает представление ресурса (JSON, XML) и может его изменять

    { "id": 123, "name": "Иван", "email": "ivan@example.com" }
    
  • HATEOAS (Hypermedia As The Engine Of Application State) — ответ должен содержать ссылки на другие ресурсы

    { "id": 123, "name": "Иван", "_links": { "self": "/users/123" } }
    
  • Самодокументируемость — интерфейс должен быть понятен без дополнительной документации

4. Cacheability (Кэшируемость)

  • Ответы должны быть помечены как кэшируемые или нет
  • Используются HTTP заголовки: Cache-Control, ETag, Last-Modified
  • Правильное кэширование уменьшает нагрузку на сервер

5. Layered System (Слоистая система)

  • Клиент не знает, обращается ли он напрямую к серверу или через прокси/балансировщик
  • Архитектура может содержать промежуточные слои (API Gateway, Cache Layer, Load Balancer)
  • Улучшает масштабируемость и безопасность

6. Code on Demand (Код по требованию) — опционально

  • Сервер может отправлять исполняемый код (JavaScript)
  • Это редко используется в современных REST API

HTTP методы в REST

REST использует стандартные HTTP методы для операций:

GET    /users         — получить список пользователей
GET    /users/123     — получить пользователя с ID 123
POST   /users         — создать нового пользователя
PUT    /users/123     — полностью заменить пользователя 123
PATCH  /users/123     — частично обновить пользователя 123
DELETE /users/123     — удалить пользователя 123
HEAD   /users         — то же, что GET, но без тела ответа
OPTIONS /users        — получить информацию о допустимых методах

Коды ответов (HTTP Status Codes)

  • 2xx (Success) — 200 OK, 201 Created, 204 No Content
  • 3xx (Redirection) — 301 Moved Permanently, 304 Not Modified
  • 4xx (Client Error) — 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
  • 5xx (Server Error) — 500 Internal Server Error, 503 Service Unavailable

Практические примеры

ДО (не RESTful, RPC стиль)

GET /api/getUser?id=123
GET /api/deleteUser?id=123&confirm=true
GET /api/updateUser?id=123&name=Иван&email=ivan@example.com

ПОСЛЕ (RESTful)

GET    /api/users/123
DELETE /api/users/123
PATCH  /api/users/123
Body: { "name": "Иван", "email": "ivan@example.com" }

Матрица REST: методы × ресурсы

Метод/users/users/{id}
GETСписокДеталь
POSTСоздать-
PUT-Заменить
PATCH-Обновить
DELETE-Удалить

Заблуждения о REST

  • ❌ REST = использование HTTP (это не так, можно нарушить принципы)
  • ❌ REST требует JSON (можно использовать XML, YAML)
  • ❌ REST требует версионирования API (можно делать без версий)
  • ❌ REST несовместим с аутентификацией (работает отлично, используй токены)

Вывод

RESTful API — это мощный и гибкий стиль для проектирования веб-сервисов. Главное: ресурсы вместо операций, стандартные методы вместо пользовательских, без состояния на сервере.