# Как можно протестировать API, что там нужно проверять?

### 1️⃣ Типы тестирования API

1. **Функциональное тестирование**
   * Проверяем, что API делает то, что должно.
   * Примеры:
     * Запрос к `/users/123` возвращает пользователя с ID 123.
     * При создании нового ресурса возвращается корректный `status code` (201 Created) и тело ответа с нужными полями.
     * Валидация входных данных: что происходит при передаче пустых, неверных или неожиданных значений.
2. **Тестирование ошибок и граничных значений**
   * Проверяем, как API реагирует на некорректные данные.
   * Примеры:
     * Неверный формат JSON.
     * Пустые или лишние поля.
     * Некорректные параметры запроса.
   * Ожидается, что сервер возвращает корректные ошибки (например, 400, 404, 422).
3. **Тестирование производительности**
   * Проверка скорости ответа и устойчивости под нагрузкой.
   * Примеры:
     * Сколько времени занимает обработка запроса.
     * Как API ведет себя при 1000 одновременных запросах.
   * Используют инструменты типа JMeter, Locust, k6.
4. **Тестирование безопасности**
   * Проверяем авторизацию и аутентификацию.
   * Примеры:
     * Доступ к приватным ресурсам без токена запрещен (401/403).
     * Попытки SQL/XXS-инъекций.
     * Ограничения на количество запросов (rate limiting).
5. **Тестирование совместимости / интеграции**
   * Проверяем, как API взаимодействует с другими сервисами.
   * Примеры:
     * API внешней оплаты правильно обрабатывает статусы платежей.
     * Вебхуки приходят и обрабатываются корректно.

***

### 2️⃣ Что проверять в каждом запросе

1. **HTTP-статус коды**
   * 2xx — успех (200, 201, 204)
   * 4xx — ошибки клиента (400, 401, 403, 404, 422)
   * 5xx — ошибки сервера (500, 502, 503)
2. **Тело ответа (Response Body)**
   * Формат (JSON, XML и т.д.)
   * Корректные поля и значения
   * Отсутствие лишних данных
3. **Заголовки (Headers)**
   * Content-Type (`application/json`)
   * Авторизация, CORS, кеширование
4. **Время отклика**
   * API не должно отвечать слишком медленно (обычно <1–2 сек для большинства эндпоинтов)
5. **Состояние сервера после запроса**
   * Например, при создании/удалении ресурса, данные должны реально появляться или удаляться в базе

***

### 3️⃣ Инструменты для тестирования API

* **Postman / Insomnia** — ручное тестирование и коллекции тестов.
* **Swagger / OpenAPI** — документация + тестирование.
* **Automated testing**:
  * Python: `requests`, `pytest` + `pytest-httpx`
  * JS: `axios` + `jest` / `mocha`
  * Java: `RestAssured`
* **Load testing**: JMeter, Locust, k6
