← Назад к вопросам

Что такое GET запрос?

1.2 Junior🔥 241 комментариев
#Клиент-серверная архитектура#Тестирование API

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

ПараметрGETPOST
НазначениеПолучить данныеОтправить данные
ПараметрыВ URLВ body
ВидимостьВидны в URLСкрыты в body
КэшированиеДаНет (по умолчанию)
Размер данныхОграничен (~2000 символов)Не ограничен
БезопасностьМеньшеБольше
ИдемпотентностьДаНет

Лучшие Практики

1. Всегда проверяй коды ответов

Не предполагай, что запрос успешен просто потому что он вернул данные.

2. Валидируй структуру ответа

Проверь наличие всех необходимых полей и их типов.

3. Используй параметры вместо строк в URL

Это правильнее и безопаснее.

4. Тестируй граничные случаи

Пустые параметры, невалидные ID, большие числа.

5. Проверяй время ответа

GET должен быть быстрым.

Заключение

GET запрос — это фундаментальный HTTP метод для получения данных. QA Engineer должен уметь:

✓ Составлять GET запросы с параметрами ✓ Тестировать различные коды ответов ✓ Валидировать структуру и данные ответа ✓ Работать с параметрами фильтрации и пагинации ✓ Проверять кэширование ✓ Использовать инструменты (Postman, curl, Python)

Это основа API тестирования.

Что такое GET запрос? | PrepBro