Каковы основные особенности RESTful систем, важные для тестировщика?

«Каковы основные особенности RESTful систем, важные для тестировщика?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При тестировании RESTful API я фокусируюсь на проверке их ключевых архитектурных принципов и корректности реализации. Вот основные особенности, которые я всегда проверяю:

1. Единообразие интерфейса и использование HTTP-методов Каждый ресурс идентифицируется URI, а операции над ним выполняются стандартными HTTP-методами. Я проверяю, что:

  • GET /api/users — возвращает список пользователей (не изменяет состояние).
  • POST /api/users — создаёт нового пользователя (тело запроса содержит данные).
  • PUT /api/users/{id} — полностью обновляет ресурс.
  • PATCH /api/users/{id} — частично обновляет ресурс.
  • DELETE /api/users/{id} — удаляет ресурс.

2. Stateless (Без состояния) Каждый запрос от клиента должен содержать всю информацию, необходимую для его обработки. Сервер не хранит состояние сессии между запросами. На практике я проверяю, что аутентификация реализована через токены (например, JWT в заголовке Authorization), а не через сессии на сервере.

3. Представление ресурсов Один и тот же ресурс может быть представлен в разных форматах. Чаще всего тестирую поддержку JSON, реже — XML.

GET /api/products/123 HTTP/1.1
Accept: application/json

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "name": "Laptop",
  "price": 999.99
}

Я проверяю заголовки Accept и Content-Type, а также обработку ошибок при запросе неподдерживаемого формата.

4. Использование кодов состояния HTTP RESTful API должен корректно использовать HTTP-статусы для информирования о результате:

  • 2xx — Успех (200 OK, 201 Created).
  • 4xx — Ошибка клиента (400 Bad Request, 404 Not Found, 422 Unprocessable Entity).
  • 5xx — Ошибка сервера. Я составляю тест-кейсы специально для проверки граничных случаев и корректности возвращаемых статусов.

5. Ссылки на ресурсы (HATEOAS) В продвинутых API ответы могут содержать гиперссылки на связанные ресурсы, что упрощает навигацию по API. Я проверяю наличие и корректность таких ссылок в ответах.

6. Идемпотентность и безопасность методов

  • Безопасные методы: GET, HEAD, OPTIONS — не должны изменять состояние ресурса. Многократные вызовы дают одинаковый результат.
  • Идемпотентные методы: PUT, DELETE, GET — многократный вызов одного и того же запроса даёт тот же результат, что и однократный. Это критически важно для тестирования отказоустойчивости и повторных отправок запросов.