1. Основы API и протокола HTTP для тестировщика: методы, коды ответов и структура запроса
Основы API и протокола HTTP для тестировщика: методы, коды ответов и структура запроса
Представьте, что вы приходите в ресторан. Вы не идете на кухню, чтобы лично жарить стейк, — вы общаетесь с официантом. Официант принимает ваш заказ, передает его повару, а затем приносит готовое блюдо или сообщает, что ингредиенты закончились. В мире программного обеспечения роль такого официанта выполняет API (Application Programming Interface). Это контракт, который позволяет одной программе «попросить» что-то у другой, не вникая в детали того, как именно работает чужой код. Для тестировщика это означает, что мы проверяем не графический интерфейс (кнопки и формы), а правильность обмена этими «заказами».
Понимание архитектуры Client-Server и роли HTTP
Большинство современных веб-приложений строятся на архитектуре «клиент-сервер». Клиент (ваш браузер, мобильное приложение или Postman) отправляет запрос, а сервер (удаленный компьютер с базой данных и бизнес-логикой) возвращает ответ. Общение происходит по протоколу HTTP (HyperText Transfer Protocol). Это набор правил, определяющий формат сообщений. Если клиент нарушит правила (например, забудет указать обязательный параметр), сервер его просто не поймет.
Тестирование API критически важно, потому что ошибки на этом уровне «дешевле» исправлять, чем на уровне UI. Если сервер позволяет создать пользователя с отрицательным возрастом через API, никакие красивые проверки в браузере не спасут систему от порчи данных. Мы работаем с «фундаментом» приложения.
Анатомия HTTP-запроса: из чего состоит «заказ»
Каждый запрос, который вы будете отправлять в Postman, состоит из четырех обязательных компонентов. Понимание их структуры — это 50% успеха на техническом интервью.
https://api.shop.com/v1/products/42. Здесь api.shop.com — это хост, а /v1/products/42 — путь к конкретному товару.> Инсайт: Тестировщик должен проверять не только успешные сценарии, но и то, как API реагирует на «сломанные» компоненты: неверный URL, отсутствие заголовков или пустой Body.
Методы HTTP: CRUD в действии
В тестировании API мы чаще всего сталкиваемся с концепцией CRUD (Create, Read, Update, Delete). Каждой операции соответствует свой метод HTTP. Понимание разницы между ними часто проверяется на собеседованиях через каверзные вопросы.
| Метод | Операция CRUD | Идемпотентность | Описание | | :--- | :--- | :--- | :--- | | GET | Read | Да | Запрашивает данные. Не должен менять состояние сервера. | | POST | Create | Нет | Создает новый ресурс. Каждый повторный запрос создаст новый объект. | | PUT | Update | Да | Полностью заменяет существующий ресурс данными из запроса. | | PATCH | Update | Нет (обычно) | Частично обновляет ресурс (например, только поле "цена"). | | DELETE | Delete | Да | Удаляет указанный ресурс. |
Идемпотентность — это важное свойство метода. Если вы нажмете кнопку «Удалить» 10 раз (метод DELETE), результат после первого раза не изменится: ресурс удален, и последующие запросы ничего не изменят. А вот если вы 10 раз отправите POST на создание заказа, в системе может появиться 10 одинаковых заказов. Это критично для тестирования логики оплаты или регистрации.
Коды ответов сервера: язык статусов
Когда сервер возвращает ответ, первое, на что смотрит тестировщик — это Status Code. Это трехзначное число, которое сообщает о результате операции. Коды делятся на пять классов, и их знание — база для любого QA.
2xx: Успех (Success)
Самый желанный код — 200 OK. Он означает, что запрос выполнен успешно. Если вы создавали объект (POST), сервер может вернуть 201 Created. Это специфический успех, подтверждающий появление новой записи в базе.3xx: Перенаправление (Redirection)
Эти коды говорят о том, что ресурс переехал. Для тестировщика API они встречаются реже, так как клиент обычно обрабатывает их автоматически. Например, 301 Moved Permanently.4xx: Ошибка клиента (Client Error)
Это ваши основные «рабочие» ошибки. Если вы видите 4xx, значит, проблема в запросе. * 400 Bad Request: Сервер не понял запрос (ошибка в синтаксисе JSON). * 401 Unauthorized: Вы не представились (нужен логин/токен). * 403 Forbidden: Вы представились, но у вас нет прав доступа к этому ресурсу (например, обычный юзер лезет в админку). * 404 Not Found: Ресурс по такому адресу не существует. * 405 Method Not Allowed: Вы пытаетесь применить DELETE к ресурсу, который можно только читать (GET).5xx: Ошибка сервера (Server Error)
Это «баги» на стороне разработчика или проблемы инфраструктуры. * 500 Internal Server Error: Самая частая ошибка. Что-то «упало» в коде сервера. Тестировщик должен завести баг-репорт и приложить логи сервера. * 503 Service Unavailable: Сервер перегружен или на обслуживании.Разбор примера: Жизненный цикл запроса на покупку билета
Давайте разберем процесс заказа билета в кино через API, чтобы закрепить структуру.
Шаг 1: Поиск сеансов (GET)
Вы отправляете запрос GET /movies/123/sessions. Сервер возвращает список доступных мест. Вы проверяете, что пришел код 200 OK и массив данных в формате JSON.
Шаг 2: Бронирование места (POST)
Вы отправляете POST /bookings с телом {"session_id": 123, "seat": "A1"}. Сервер создает бронь и возвращает 201 Created с ID вашей брони. Если вы отправите этот же запрос второй раз, сервер должен вернуть 409 Conflict (место уже занято) или 400, но не создавать дубликат.
Шаг 3: Изменение данных (PATCH)
Вы решили добавить к билету попкорн. Отправляем PATCH /bookings/789 с телом {"popcorn": true}. Сервер обновляет только это поле и возвращает 200 OK.
Шаг 4: Отмена (DELETE)
Планы изменились. Отправляем DELETE /bookings/789. Сервер удаляет бронь и возвращает 204 No Content (успешно, но данных в ответе больше нет).
Формат данных JSON: стандарт индустрии
Хотя API могут общаться через XML или даже обычный текст, стандартом является JSON (JavaScript Object Notation). Он легок для чтения человеком и машиной.
В JSON важно соблюдать типы данных: строки пишутся в кавычках, числа — без, булевы значения (true/false) — тоже без. Массивы заключаются в квадратные скобки [], а объекты — в фигурные {}. Ошибка в одной запятой приведет к тому, что сервер вернет 400 Bad Request.
Если из этой главы запомнить три вещи — это разница между методами (GET vs POST), классы статус-кодов (2xx, 4xx, 5xx) и структура запроса (URL, Method, Headers, Body). Эти знания станут фундаментом для нашей следующей практической работы в Postman.