Что такое REST API и его основные принципы?

«Что такое REST API и его основные принципы?» — вопрос из категории API тестирование, который задают на 25% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

REST (Representational State Transfer) API — это архитектурный стиль для построения распределённых веб-сервисов. Он использует стандартные протоколы и методы HTTP для взаимодействия клиента и сервера. Данные обычно передаются в форматах JSON или XML.

Ключевые принципы REST (ограничения архитектуры):

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

    • Ресурсы: всё представляется как ресурс с уникальным URI (например, /api/users, /api/orders/123).
    • Манипуляция ресурсами через представления: клиент работает с представлением ресурса (JSON), а не с самим ресурсом напрямую.
    • Самодостаточные сообщения: каждый запрос содержит всю информацию, необходимую для его обработки.
    • HATEOAS (Hypermedia as the Engine of Application State): ответы могут содержать ссылки на другие доступные действия с ресурсом.
  2. Отсутствие состояния (Stateless)

    • Сервер не хранит состояние клиента между запросами. Каждый запрос должен содержать всю необходимую аутентификационную и контекстную информацию (обычно в заголовках).
  3. Кэшируемость (Cacheable)

    • Ответы сервера должны явно указывать, можно ли их кэшировать и как долго, чтобы повысить производительность.
  4. Клиент-серверная архитектура (Client-Server)

    • Чёткое разделение обязанностей: клиент отвечает за UI и логику отображения, сервер — за хранение данных и бизнес-логику.
  5. Многоуровневая система (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 и хорошей масштабируемости.