Урок 2 из 8 · 20 мин · обновлено
HTTP: методы, адрес, заголовки и коды ответа
Из чего состоит HTTP-запрос: метод, адрес, параметры, заголовки и тело. Чем GET отличается от POST, PUT, PATCH и DELETE. Что значат коды ответа 200, 201, 400, 401, 404 и 500.
Из чего состоит запрос
Клиент и сервер общаются по протоколу HTTP — набору правил для запросов и ответов в интернете. Любой HTTP-запрос состоит из частей:
GET https://dummyjson.com/products/search?q=phone&limit=2
Accept: application/json
- метод — что сделать:
GET; - адрес (URL) — с чем:
https://dummyjson.com/products/search; - параметры — уточнения после
?, в видеимя=значениечерез&: искатьphone, вернуть 2 товара; - заголовки — служебная информация: какой формат ответа нужен, кто отправляет, токен для входа;
- тело — данные, которые отправляем на сервер. У GET его нет, у POST и PUT обычно есть.
Методы
| Метод | Что делает | Пример |
|---|---|---|
GET |
получить данные | список товаров, один товар |
POST |
создать новое | добавить товар, оформить заказ |
PUT |
изменить целиком | заменить карточку товара |
PATCH |
изменить часть | поменять только цену |
DELETE |
удалить | удалить товар из каталога |
GET ничего не меняет на сервере. Его можно повторять сколько угодно — ответ будет тем же. С POST иначе: каждый повтор может создать ещё один заказ. Поэтому кнопку «Оплатить» после нажатия блокируют.
Что именно делает каждый метод, решают авторы API. Привычные правила из таблицы соблюдают большинство API, но точное поведение всегда проверяют по документации.
Ответ и коды
Ответ сервера тоже состоит из частей: код ответа, заголовки и тело с данными. Код — трёхзначное число, по первой цифре сразу понятно, что произошло:
| Код | Что значит | Пример |
|---|---|---|
200 OK |
всё хорошо | товар найден |
201 Created |
создано | товар добавлен |
400 Bad Request |
неверный запрос | не хватает поля, неверный формат |
401 Unauthorized |
нужна авторизация | нет токена или он устарел |
403 Forbidden |
доступ запрещён | токен есть, но прав не хватает |
404 Not Found |
не найдено | товара с таким номером нет |
500 Internal Server Error |
ошибка на сервере | сервер сломался |
Запомнить просто:
- 2xx — успех;
- 4xx — ошибка клиента: неправильный запрос, нет доступа, нет такого ресурса;
- 5xx — ошибка сервера: запрос мог быть верным, но сервер не справился.
Для тестировщика это важно. Если на правильный запрос пришёл 500 — это баг сервера. Если на неправильный запрос, например с пустым обязательным полем, пришёл 200 — это тоже баг: сервер должен был отказать с кодом 400.
Попробуйте сами. Определите метод и ожидаемый код ответа для каждой ситуации: 1) получить корзину пользователя; 2) добавить новый адрес доставки; 3) запросить заказ с номером, которого нет; 4) открыть историю заказов без входа в аккаунт.
Ответ
GET, код200.POST, код201— создано. Некоторые API отвечают просто200, это зависит от документации.GET, код404— не найдено.GET, код401— нужна авторизация.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Каким методом получают список товаров?
GET только получает данные и ничего не меняет на сервере.
-
Сервер ответил кодом 500. Чья это, скорее всего, ошибка?
Коды 5xx означают проблему на сервере. Тестировщик в таком случае заводит баг на бэкенд.
-
Что передают параметры в адресе ...products/search?q=phone&limit=5?
После ? идут параметры в виде имя=значение, разделённые &. Сервер читает их и выполняет поиск.
-
Чем PUT отличается от PATCH?
Так принято в большинстве API. Но точное поведение каждого метода всегда смотрят в документации конкретного API.