Что такое GET запрос?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
GET Запрос: Основы и Практическое Применение
GET запрос — это один из основных HTTP методов, используемый для получения данных с сервера. Это первое, что изучает QA Engineer при начале работы с API тестированием.
Определение GET
GET — это HTTP метод, который запрашивает данные с сервера БЕЗ изменения состояния. Это безопасный и идемпотентный метод, что означает множественные GET запросы к одному ресурсу дают одинаковый результат.
Ключевые характеристики GET:
- Безопасный: не изменяет данные на сервере
- Идемпотентный: повторные запросы возвращают один результат
- Видимые параметры: данные видны в URL
- Нет тела: обычно GET запросы не содержат body
- Кэшируемый: результаты могут кэшироваться браузером
Синтаксис GET Запроса
Базовая структура
GET /api/v1/users HTTP/1.1
Host: api.example.com
User-Agent: curl/7.68.0
Accept: application/json
Authorization: Bearer token123
Компоненты:
GET— метод/api/v1/users— endpoint (путь к ресурсу)HTTP/1.1— версия протокола- Заголовки (Headers) — метаинформация
Query Parameters (Параметры Запроса)
Данные в GET запросе передаются через URL параметры (Query String):
GET /api/v1/users?status=active&role=admin HTTP/1.1
Разбор:
?— начало параметровstatus=active— первый параметр&— разделительrole=admin— второй параметр
Примеры реальных GET запросов:
GET /api/v1/products?category=electronics&sort=price_asc&page=1&limit=20
GET /api/v1/orders?user_id=123&date_from=2026-01-01&date_to=2026-03-23
GET /api/v1/search?q=laptop&filters=brand:Apple,Dell
Примеры GET Запросов с curl
Простой GET запрос
curl https://api.example.com/api/v1/users
GET с параметрами
curl "https://api.example.com/api/v1/users?status=active&role=admin"
GET с заголовками
curl -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
https://api.example.com/api/v1/users/123
GET с timeout
curl --max-time 5 https://api.example.com/api/v1/slow-endpoint
Тестирование GET Запросов
Что проверяем в GET
1. Код ответа (Status Code)
- 200 OK: успешно получены данные
- 400 Bad Request: неправильные параметры
- 401 Unauthorized: не авторизован
- 403 Forbidden: нет доступа
- 404 Not Found: ресурс не существует
- 500 Server Error: ошибка на сервере
Пример теста:
def test_get_user_success():
response = requests.get("https://api.example.com/api/v1/users/123")
assert response.status_code == 200
assert response.json()["id"] == 123
2. Структура Ответа
Проверяем, что ответ содержит ожидаемые поля:
def test_get_user_structure():
response = requests.get("https://api.example.com/api/v1/users/123")
data = response.json()
assert "id" in data
assert "name" in data
assert "email" in data
assert isinstance(data["id"], int)
assert isinstance(data["name"], str)
3. Данные
Проверяем корректность данных:
def test_get_user_data():
response = requests.get("https://api.example.com/api/v1/users/123")
data = response.json()
assert data["id"] == 123
assert data["name"] == "John Doe"
assert data["email"] == "john@example.com"
4. Фильтрация и Параметры
def test_get_users_filter():
response = requests.get(
"https://api.example.com/api/v1/users",
params={"status": "active", "role": "admin"}
)
data = response.json()
for user in data:
assert user["status"] == "active"
assert user["role"] == "admin"
5. Пагинация
def test_get_users_pagination():
# Первая страница
response1 = requests.get(
"https://api.example.com/api/v1/users",
params={"page": 1, "limit": 10}
)
assert len(response1.json()) == 10
# Вторая страница
response2 = requests.get(
"https://api.example.com/api/v1/users",
params={"page": 2, "limit": 10}
)
assert response1.json()[0]["id"] != response2.json()[0]["id"]
Типичные Ошибки при Тестировании GET
1. Неправильно кодирование параметров
# Неправильно
params = "search=test user" # Пробел не закодирован
# Правильно
params = {"search": "test user"} # requests автоматически закодирует
response = requests.get(url, params=params)
2. Забыли добавить заголовок Authorization
# Неправильно
response = requests.get(url)
# Правильно
headers = {"Authorization": "Bearer token123"}
response = requests.get(url, headers=headers)
3. Не проверили наличие данных
# Неправильно
response = requests.get(url)
print(response.json()[0]) # Может быть пусто!
# Правильно
response = requests.get(url)
data = response.json()
assert len(data) > 0
print(data[0])
Инструменты для Тестирования GET
Postman: Визуальный инструмент, где можно построить GET запрос, добавить параметры и заголовки.
curl: Командная строка, быстро тестировать API.
Python requests: Для автоматизированного тестирования.
REST Assured: Для Java проектов.
Insomnia: Альтернатива Postman.
Кэширование GET Запросов
GET запросы часто кэшируются. Проверяем заголовки Cache-Control:
HTTP/1.1 200 OK
Cache-Control: max-age=3600 // Кэшировать 1 час
ETag: "abc123" // Для проверки версии
Last-Modified: Mon, 23 Mar 2026 10:00:00 GMT
Тестирование кэша:
def test_get_caching():
response1 = requests.get(url)
time1 = response1.headers.get("Date")
time.sleep(1)
response2 = requests.get(url)
time2 = response2.headers.get("Date")
# Если кэширован, даты должны быть одинаковые
assert time1 == time2
GET vs POST
| Параметр | GET | POST |
|---|---|---|
| Назначение | Получить данные | Отправить данные |
| Параметры | В URL | В body |
| Видимость | Видны в URL | Скрыты в body |
| Кэширование | Да | Нет (по умолчанию) |
| Размер данных | Ограничен (~2000 символов) | Не ограничен |
| Безопасность | Меньше | Больше |
| Идемпотентность | Да | Нет |
Лучшие Практики
1. Всегда проверяй коды ответов
Не предполагай, что запрос успешен просто потому что он вернул данные.
2. Валидируй структуру ответа
Проверь наличие всех необходимых полей и их типов.
3. Используй параметры вместо строк в URL
Это правильнее и безопаснее.
4. Тестируй граничные случаи
Пустые параметры, невалидные ID, большие числа.
5. Проверяй время ответа
GET должен быть быстрым.
Заключение
GET запрос — это фундаментальный HTTP метод для получения данных. QA Engineer должен уметь:
✓ Составлять GET запросы с параметрами ✓ Тестировать различные коды ответов ✓ Валидировать структуру и данные ответа ✓ Работать с параметрами фильтрации и пагинации ✓ Проверять кэширование ✓ Использовать инструменты (Postman, curl, Python)
Это основа API тестирования.