Ответ
REST (Representational State Transfer) — это архитектурный стиль, а не протокол, для создания масштабируемых и надежных веб-сервисов. Он определяет набор ограничений (constraints) для проектирования сетевых приложений.
Ключевые принципы:
-
Клиент-серверная архитектура (Client-Server): Четкое разделение. Клиент (UI) не зависит от сервера (хранение данных), что позволяет им развиваться независимо.
-
Отсутствие состояния (Stateless): Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для его выполнения. Сервер не хранит состояние клиента между запросами. Это повышает надежность и масштабируемость.
-
Кэширование (Cacheable): Ответы сервера должны явно помечаться как кэшируемые или некэшируемые. Это позволяет клиентам и промежуточным узлам сохранять копии ответов для улучшения производительности.
-
Единообразие интерфейса (Uniform Interface): Фундаментальный принцип, который стандартизирует взаимодействие. Он включает:
- Идентификация ресурсов: Ресурсы идентифицируются через URI (например,
/users/123
). - Манипуляция ресурсами через представления: Клиент работает с представлением ресурса (например, JSON), а не с самим ресурсом на сервере.
- Самодостаточные сообщения: Каждый ответ содержит достаточно информации для его интерпретации (например,
Content-Type: application/json
).
- Идентификация ресурсов: Ресурсы идентифицируются через URI (например,
-
Слоистая система (Layered System): Клиент не знает, подключен ли он напрямую к конечному серверу или к промежуточному (например, кэш, прокси, балансировщик нагрузки).
-
Код по требованию (Code on Demand, опционально): Сервер может временно расширить функциональность клиента, передав ему исполняемый код (например, JavaScript).
Пример использования принципов в API:
- Получение пользователя (ресурс):
GET /users/42
- Создание пользователя:
POST /users
с телом{"name": "Alice"}
- Обновление пользователя:
PUT /users/42
с телом{"name": "Alice", "email": "alice@example.com"}
- Удаление пользователя:
DELETE /users/42
Этот подход, использующий стандартные методы HTTP для операций над ресурсами, является основой RESTful API.