REST (Representational State Transfer)¶
REST — это архитектурный стиль для построения веб-сервисов, основанный на принципах взаимодействия через HTTP и представление ресурсов.
REST не является протоколом или стандартом — это набор ограничений и рекомендаций, которые делают API понятным, масштабируемым и кроссплатформенным.
Основные принципы REST¶
1.Клиент-серверная архитектура¶
-
Клиент (например, браузер или мобильное приложение) и сервер отделены.
-
Сервер отвечает за хранение и обработку данных.
-
Клиент — за отображение и взаимодействие с пользователем.
2.Отсутствие состояния (statelessness)¶
-
Каждый HTTP-запрос должен быть самодостаточным.
-
Сервер не хранит состояние клиента между запросами.
-
Все необходимые данные (например, токен авторизации) должны передаваться в каждом запросе.
3.Кеширование¶
-
Ответы сервера могут быть кешируемыми, если они не изменяются часто.
-
Это позволяет снизить нагрузку и повысить производительность.
4.Единый интерфейс (uniform interface)¶
-
Взаимодействие с ресурсами всегда происходит через единые правила.
-
Ресурсы идентифицируются через URL.
-
Операции выполняются с помощью стандартных HTTP-методов:
| Метод | Назначение |
|---|---|
| GET | Получение ресурса |
| POST | Создание ресурса |
| PUT | Полное обновление ресурса |
| PATCH | Частичное обновление |
| DELETE | Удаление ресурса |
5.Идентификация ресурсов через URI¶
- Ресурсы (например, пользователи, заказы) представлены уникальными адресами:
GET /users/42
DELETE /orders/1001
6.Представление ресурса (Representation)¶
-
Ресурс может передаваться в разных форматах: JSON (чаще всего), XML и др.
-
Клиент может запрашивать нужный формат через заголовок Accept.
7.Код по требованию (необязательный принцип)¶
-
Сервер может передавать клиенту исполняемый код (например, JavaScript).
-
Этот принцип редко используется на практике.
Пример REST-запроса¶
GET /api/users/10 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer abc123
Ответ:
{
"id": 10,
"name": "Alice",
"email": "alice@example.com"
}
Преимущества REST¶
-
Простота и понятность.
-
Использование стандартных HTTP-методов.
-
Масштабируемость и гибкость.
-
Поддержка кэширования и разграничения клиент-серверной логики.