Ответ
REST (Representational State Transfer) API — это архитектурный стиль для построения распределённых веб-сервисов. Он использует стандартные протоколы и методы HTTP для взаимодействия клиента и сервера. Данные обычно передаются в форматах JSON или XML.
Ключевые принципы REST (ограничения архитектуры):
-
Единообразие интерфейса (Uniform Interface)
- Ресурсы: всё представляется как ресурс с уникальным URI (например,
/api/users,/api/orders/123). - Манипуляция ресурсами через представления: клиент работает с представлением ресурса (JSON), а не с самим ресурсом напрямую.
- Самодостаточные сообщения: каждый запрос содержит всю информацию, необходимую для его обработки.
- HATEOAS (Hypermedia as the Engine of Application State): ответы могут содержать ссылки на другие доступные действия с ресурсом.
- Ресурсы: всё представляется как ресурс с уникальным URI (например,
-
Отсутствие состояния (Stateless)
- Сервер не хранит состояние клиента между запросами. Каждый запрос должен содержать всю необходимую аутентификационную и контекстную информацию (обычно в заголовках).
-
Кэшируемость (Cacheable)
- Ответы сервера должны явно указывать, можно ли их кэшировать и как долго, чтобы повысить производительность.
-
Клиент-серверная архитектура (Client-Server)
- Чёткое разделение обязанностей: клиент отвечает за UI и логику отображения, сервер — за хранение данных и бизнес-логику.
-
Многоуровневая система (Layered System)
- Архитектура может состоять из нескольких уровней (балансировщики, прокси, шлюзы), что повышает масштабируемость и безопасность.
Сопоставление HTTP-методов и операций CRUD:
| HTTP-метод | Операция CRUD | Пример URI | Действие |
|---|---|---|---|
| GET | Read (Чтение) | GET /api/users |
Получить список пользователей |
| GET | Read (Чтение) | GET /api/users/1 |
Получить пользователя с id=1 |
| POST | Create (Создание) | POST /api/users |
Создать нового пользователя |
| PUT | Update (Обновление/Замена) | PUT /api/users/1 |
Заменить данные пользователя с id=1 |
| PATCH | Update (Частичное обновление) | PATCH /api/users/1 |
Частично обновить данные пользователя |
| DELETE | Delete (Удаление) | DELETE /api/users/1 |
Удалить пользователя с id=1 |
Пример запроса и ответа:
### Запрос на создание пользователя (POST)
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer <token>
{
"name": "Alice",
"email": "alice@example.com"
}
// Ответ сервера (201 Created)
HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/101
{
"id": 101,
"name": "Alice",
"email": "alice@example.com",
"createdAt": "2023-10-01T12:00:00Z",
"_links": {
"self": { "href": "/api/users/101" },
"orders": { "href": "/api/users/101/orders" }
}
}
Коды состояния HTTP (Status Codes), которые важно проверять при тестировании:
2xx— Успех (200 OK, 201 Created).4xx— Ошибка клиента (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found).5xx— Ошибка сервера (500 Internal Server Error, 502 Bad Gateway).
REST широко распространён благодаря своей простоте, использованию стандартов HTTP и хорошей масштабируемости.