Ответ
При тестировании 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— многократный вызов одного и того же запроса даёт тот же результат, что и однократный. Это критически важно для тестирования отказоустойчивости и повторных отправок запросов.