1. Основы клиент-серверной архитектуры и анатомия HTTP-запроса
Основы клиент-серверной архитектуры и анатомия HTTP-запроса
Добро пожаловать на курс «Тестирование API: Полное руководство для QA Junior/Middle». Мы начинаем наше погружение в мир API с фундаментальных понятий. Прежде чем открывать Postman или писать автотесты, необходимо четко понимать, как устроен интернет «под капотом».
В этой статье мы разберем, как взаимодействуют компьютеры в сети, из чего состоит это общение и почему HTTP — это основной язык веба.
Клиент-серверная архитектура: Как это работает?
Большинство современных веб-приложений и мобильных сервисов построено на базе клиент-серверной архитектуры. Это модель взаимодействия, в которой задачи распределены между поставщиками ресурсов или услуг, называемыми серверами, и заказчиками услуг, называемыми клиентами.
Чтобы понять это проще, давайте представим обычный ресторан.
Аналогия с рестораном
!Аналогия клиент-серверной архитектуры через процесс заказа еды в ресторане
Техническое определение
В контексте тестирования API:
* Клиент отправляет Запрос (Request) через сеть. * Сервер обрабатывает этот запрос, обращается к базе данных (если нужно), выполняет вычисления и отправляет обратно Ответ (Response).
Протокол HTTP
Как клиент и сервер понимают друг друга? Им нужен общий язык. В вебе таким языком является HTTP (HyperText Transfer Protocol — протокол передачи гипертекста).
HTTP — это протокол прикладного уровня. Он работает по принципу «запрос-ответ». Важно помнить, что HTTP является протоколом без сохранения состояния (stateless). Это означает, что сервер не запоминает предыдущие запросы от того же клиента. Каждый запрос — это новая, независимая история (хотя существуют механизмы, такие как Cookies и токены, чтобы имитировать «память», но об этом позже).
Анатомия HTTP-запроса (Request)
Когда вы, как QA-инженер, будете тестировать API, вы будете конструировать именно HTTP-запросы. Давайте разберем его «скелет».
HTTP-запрос состоит из трех основных частей:
!Структура HTTP-запроса: метод, заголовки и тело
1. Стартовая строка
Она содержит метод запроса, URL (адрес) и версию протокола.
#### URL (Uniform Resource Locator)
Это адрес ресурса, к которому мы обращаемся. Например:
https://api.example.com/users/123
* https:// — протокол (с шифрованием).
* api.example.com — домен (хост).
* /users/123 — путь (path) к конкретному ресурсу (пользователю с ID 123).
#### Методы HTTP (Verbs) Метод указывает серверу, какое действие мы хотим совершить. Самые популярные методы часто называют аббревиатурой CRUD (Create, Read, Update, Delete):
GET (Read): Получить данные. Пример: Открыть страницу товара или получить список пользователей.* У этого метода обычно нет тела запроса. POST (Create): Создать новые данные. Пример: Регистрация пользователя или оформление заказа.* Данные передаются в теле запроса. PUT (Update): Полностью обновить существующие данные. Пример: Перезаписать всю информацию о товаре.* PATCH (Update): Частично обновить данные. Пример: Изменить только пароль пользователя.* DELETE (Delete): Удалить данные. Пример: Удалить товар из корзины.*
2. Заголовки (Headers)
Заголовки — это метаданные, служебная информация для сервера. Они передаются в формате Ключ: Значение.
Примеры важных заголовков:
* Content-Type: application/json — сообщает серверу, что мы отправляем данные в формате JSON.
* Authorization: Bearer <token> — ваш «пропуск» или паспорт. Подтверждает, что вы имеете право выполнять этот запрос.
* User-Agent — информация о клиенте (например, версия браузера или Postman).
3. Тело запроса (Body)
Это полезная нагрузка (payload). Здесь находятся данные, которые мы хотим отправить на сервер. Тело есть у методов POST, PUT, PATCH, но обычно отсутствует у GET и DELETE.
Чаще всего в современных REST API данные передаются в формате JSON.
Пример тела запроса (создание пользователя):
Анатомия HTTP-ответа (Response)
После обработки запроса сервер отправляет ответ. Он также имеет структуру:
Коды состояния (Status Codes)
Это трехзначные числа, которые сообщают результат операции. QA-инженер обязан знать основные классы кодов наизусть.
* 1xx (Информационные): Запрос получен, процесс продолжается.
* 2xx (Успех):
* 200 OK: Все прошло хорошо (стандартный ответ для GET).
* 201 Created: Ресурс успешно создан (стандартный ответ для POST).
* 3xx (Перенаправление): Ресурс перемещен, нужно перейти по другому адресу.
* 4xx (Ошибка клиента): Вы (клиент) сделали что-то не так.
* 400 Bad Request: Ошибка в синтаксисе запроса (например, отправили текст вместо числа).
* 401 Unauthorized: Вы не авторизованы (нет паспорта).
* 403 Forbidden: Доступ запрещен (паспорт есть, но визы нет).
* 404 Not Found: Ресурс не найден (неверный URL).
* 5xx (Ошибка сервера): Вы все сделали правильно, но сервер сломался.
* 500 Internal Server Error: Внутренняя ошибка сервера (упала база, ошибка в коде разработчика).
* 503 Service Unavailable: Сервер перегружен или на обслуживании.
Тело ответа
Сервер возвращает данные, которые вы запрашивали, или описание ошибки. Например, если мы запрашивали данные пользователя, сервер вернет:
Формат JSON
Вы заметили, что в примерах используется формат, похожий на объект в JavaScript. Это JSON (JavaScript Object Notation). Это стандарт де-факто для REST API.
Основные правила JSON:
* Данные хранятся в парах "ключ": значение.
* Ключи всегда в двойных кавычках.
* Строковые значения всегда в двойных кавычках.
* Поддерживаются типы: строка, число, булево значение (true/false), массив [], объект {} и null.
Инструменты: Postman и Swagger
В теории все выглядит логично, но как это «потрогать» руками? Для этого мы будем использовать специальные инструменты.
* Swagger (OpenAPI): Это документация к API. Представьте, что это меню в ресторане. Там написано, какие блюда (эндпоинты) есть, из чего они состоят (параметры) и сколько стоят (какие права нужны). * Postman: Это инструмент для отправки запросов. Это ваш пульт управления, с помощью которого вы можете сформировать любой запрос, добавить заголовки, тело и посмотреть, что ответит сервер, не создавая при этом графический интерфейс сайта.
В следующих уроках мы установим Postman и сделаем свой первый реальный запрос.
Заключение
Понимание структуры HTTP-запроса — это база, без которой невозможно качественное тестирование API. Вы должны уметь читать запрос как открытую книгу: видеть метод, понимать заголовки и анализировать тело ответа.
В следующем уроке мы подробно разберем, что такое REST, чем он отличается от SOAP, и начнем практическую работу.