Содержание

Введение

Практически каждый современный веб-сервис, мобильное приложение или микросервис использует API для обмена данными между компонентами системы. В большинстве случаев речь идет именно о REST API.

Как работает REST API
Как работает REST API

Поэтому знание REST сегодня является одним из базовых навыков QA Engineer. Независимо от того, занимается ли специалист ручным тестированием или автоматизацией, понимание принципов REST помогает эффективнее анализировать работу системы, находить дефекты и писать качественные тесты.

В данной статье разберем основные принципы REST, поговорим о RESTful API, HTTP-методах, статус-кодах, идемпотентности и особенностях тестирования API.

Что такое REST

REST (Representational State Transfer) — архитектурный стиль взаимодействия компонентов распределённой системы.

Термин был предложен Роем Филдингом в 2000 году в его докторской диссертации.

Рой Филдинг
Рой Филдинг

Важно понимать, что REST не является:

  • протоколом;

  • языком программирования;

  • библиотекой;

  • фреймворком.

REST представляет собой набор архитектурных ограничений и рекомендаций по построению API.

Важно: REST не требует использования JSON. API может передавать данные в различных форматах, например XML, YAML или даже обычном тексте. Однако на практике именно JSON стал фактическим стандартом для большинства современных REST API благодаря своей простоте и удобству обработки.

Главная идея заключается в том, что каждая сущность системы рассматривается как ресурс.

Примеры ресурсов:

  • пользователь;

  • заказ;

  • товар;

  • комментарий;

  • платеж.

Доступ к ресурсам осуществляется через HTTP.

Например:

GET /users/15

Получение пользователя.

DELETE /users/15

Удаление пользователя.

PUT /users/15

Обновление пользователя.

История появления REST

До широкого распространения REST многие компании использовали SOAP (Simple Object Access Protocol) — протокол обмена структурированными сообщениями в распределённых системах.

SOAP предоставлял большие возможности, однако имел ряд недостатков:

  • громоздкие XML-сообщения;

  • сложную спецификацию;

  • высокие накладные расходы;

  • сложность поддержки.

REST vs SOAP
REST vs SOAP

Рой Филдинг предложил использовать уже существующие возможности HTTP (HyperText Transfer Protocol — протокол прикладного уровня для передачи данных в веб-системах) и строить взаимодействие вокруг ресурсов.

Подход оказался значительно проще и эффективнее, благодаря чему REST постепенно стал стандартом де-факто для веб-разработки.

Сегодня REST применяется практически повсеместно:

  • веб-приложения;

  • мобильные приложения;

  • микросервисная архитектура;

  • облачные платформы;

  • публичные API.

Основные принципы REST

REST базируется на нескольких обязательных ограничениях.

Принципы REST
Принципы REST

Клиент—серверная архитектура (Client-Server)

Клиент и сервер разделены между собой.

Клиент отвечает за пользовательский интерфейс.

Сервер отвечает за хранение и обработку данных.

Отсутствие состояния (Stateless)

Каждый запрос должен содержать всю необходимую информацию.

Сервер не хранит состояние клиента между запросами.

Например:

GET /profile
Authorization: Bearer token

Токен передается в каждом запросе.

Это позволяет легко масштабировать систему.

Кэшируемость (Cacheable)

Ответы сервера могут кэшироваться.

Например:

Cache-Control: max-age=3600

Клиент может использовать сохраненный ответ в течение часа без обращения к серверу.

Единый интерфейс (Uniform Interface)

Все ресурсы используют единый интерфейс взаимодействия.

Например:

GET /users
GET /orders
GET /products

Независимо от ресурса используются одинаковые HTTP-механизмы.

Многоуровневая система (Layered System)

Клиент может взаимодействовать не напрямую с сервером, а через промежуточные слои:

  • балансировщики нагрузки;

  • прокси;

  • API Gateway;

  • CDN.

Код по требованию (Code-on-Demand) (необязательное ограничение)

Сервер может передавать клиенту исполняемый код для расширения его функциональности.

Наиболее распространённый пример — передача JavaScript-кода веб-браузеру.

Благодаря этому клиент может получать новую функциональность без обновления приложения.

Однако в REST API данный принцип используется редко, поэтому считается опциональным ограничением REST.

Что такое RESTful API

RESTful API — это API, которое соблюдает принципы REST.

Не любой HTTP API является RESTful.

Плохой пример:

POST /createUser
POST /deleteUser
POST /getUser

Такой подход напоминает удалённый вызов процедур (RPC).

RESTful вариант выглядит следующим образом:

POST /users
GET /users/1
PUT /users/1
DELETE /users/1

В этом случае действие определяется HTTP-методом, а URL описывает ресурс.

Методы HTTP в REST

REST активно использует возможности протокола HTTP.

HTTP-методы REST API
HTTP-методы REST API

GET

Получение данных.

GET /users/1

POST

Создание нового ресурса.

POST /users

PUT

Полное обновление ресурса.

PUT /users/1

PATCH

Частичное обновление ресурса.

PATCH /users/1

DELETE

Удаление ресурса.

DELETE /users/1

Идемпотентность HTTP-методов

Идемпотентность означает, что повторное выполнение операции приводит систему к одному и тому же состоянию.

Идемпотентность HTTP-методов
Идемпотентность HTTP-методов

Например:

DELETE /users/15

Первый запрос удаляет пользователя (200 OK или 204 No Content). Повторный запрос к тому же URL вернёт 404 Not Found. Состояние системы на сервере (пользователя 15 нет) после первого и второго запросов одинаково. Именно это и означает идемпотентность: повторные запросы не меняют состояние сервера, даже если HTTP-код ответа отличается.

Важно для QA: идемпотентность не гарантирует одинаковый ответ — она гарантирует одинаковое состояние системы.

Таблица идемпотентности

Метод

Идемпотентный

GET

Да

HEAD

Да

OPTIONS

Да

PUT

Да

DELETE

Да

POST

Нет

PATCH

Зависит от реализации

Почему это важно для QA

Во время тестирования необходимо проверять:

  • повторные запросы;

  • защиту от дублей;

  • корректную работу Retry-механизмов;

  • обработку сетевых ошибок.

Особенно важно это для:

  • платежей;

  • переводов;

  • заказов;

  • бронирований.

HATEOAS — последний уровень зрелости REST

HATEOAS (Hypermedia As The Engine Of Application State) считается одним из официальных принципов REST.

Модель зрелости REST
Модель зрелости REST

Суть заключается в том, что сервер сам сообщает клиенту доступные действия через ссылки.

Пример ответа:

{
  "id": 15,
  "name": "John",
  "_links": {
    "self": {
      "href": "/users/15"
    },
    "orders": {
      "href": "/users/15/orders"
    },
    "delete": {
      "href": "/users/15"
    }
  }
}

Клиент получает не только данные, но и информацию о дальнейших действиях.

Модель зрелости Richardson

Уровень

Описание

Level 0

RPC

Level 1

Ресурсы

Level 2

HTTP-методы

Level 3

HATEOAS

Большинство современных API находятся на Level 2.

Полноценный HATEOAS в классическом понимании встречается реже, чем Level 2, но его элементы (например, поле self или ссылки на связанные ресурсы) используются во многих современных API — JSON:API, HAL. GraphQL использует иной подход к взаимодействию клиента и сервера и обычно не относится к HATEOAS.

Коды ответов HTTP

REST активно использует стандартные HTTP Status Codes.

HTTP Status Codes шпаргалка
HTTP Status Codes шпаргалка

Успешные ответы

Код

Значение

200

OK

201

Created

204

No Content

Ошибки клиента

Код

Значение

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

409

Conflict

422

Validation Error

Ошибки сервера

Код

Значение

500

Internal Server Error

502

Bad Gateway

503

Service Unavailable

REST в тестировании

Для QA-инженера REST API является одним из основных объектов тестирования.

Чек-лист тестирования REST API
Чек-лист тестирования REST API

Наиболее распространённые проверки:

Проверка статус-кодов

Необходимо убедиться, что сервер возвращает корректный код ответа.

Например:

  • создание ресурса — 201;

  • удаление — 204;

  • отсутствующий объект — 404.

Проверка структуры ответа

Тестировщик проверяет:

  • обязательные поля;

  • типы данных;

  • вложенные объекты;

  • соответствие документации.

Проверка бизнес-логики

Например:

  1. Создать пользователя.

  2. Получить пользователя.

  3. Проверить сохранённые данные.

Проверка безопасности

Следует тестировать:

  • авторизацию;

  • роли пользователей;

  • доступ к чужим данным;

  • работу токенов.

Чек-лист REST API

  • корректность HTTP-методов;

  • корректность статус-кодов;

  • валидация входных данных;

  • обработка пустых значений;

  • обработка специальных символов;

  • проверка авторизации;

  • проверка ролей;

  • проверка пагинации;

  • проверка сортировки;

  • проверка фильтрации;

  • проверка версионирования API (/v1/ vs /v2/);

  • проверка производительности;

  • проверка идемпотентности.

Инструменты для работы с REST

Postman

Самый популярный инструмент тестирования API.

Возможности:

  • отправка запросов;

  • коллекции;

  • переменные окружения;

  • автотесты;

  • Collection Runner.

Swagger / OpenAPI

Позволяет документировать API и быстро изучать доступные эндпоинты.

Insomnia

Упрощённая альтернатива Postman.

curl

Консольный инструмент для отправки HTTP-запросов.

Пример:

curl -X GET https://api.example.com/users/1

Выводы

REST является самым популярным архитектурным стилем построения API в современных системах.

Для QA Engineer понимание REST необходимо по нескольким причинам:

  • большинство современных проектов используют REST API;

  • REST регулярно встречается на собеседованиях;

  • знание HTTP помогает быстрее находить дефекты;

  • API-тестирование является важной частью работы тестировщика.

Понимание принципов REST, HTTP-методов, статус-кодов, идемпотентности и HATEOAS позволяет QA-инженеру глубже анализировать систему, писать более качественные тесты и эффективнее взаимодействовать с разработчиками.

Спасибо за внимание
Спасибо за внимание

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


  1. Glazz87
    17.06.2026 16:12

    В статье указано, что POST не идемпотентный. При этом указано, что API может считаться RESTful только если строго выполняются все REST принципы.
    Получается, RESTful API в принципе не может иметь методов POST?
    Разовьем вопрос: RESTful API вообще не может создавать сущностей(ведь создание любой сущности меняет состояние системы)?
    :)