Что можно выполнять с помощью GET-запроса?

«Что можно выполнять с помощью GET-запроса?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GET-запросы используются для получения (чтения) данных с сервера. Согласно спецификации HTTP, они должны быть идемпотентными и безопасными, то есть не изменять состояние сервера.

Основные сценарии использования в тестировании и разработке:

  1. Получение ресурсов: Загрузка страницы, получение списка пользователей (GET /api/users), деталей товара (GET /api/products/123).
  2. Фильтрация, сортировка, пагинация: Использование query-параметров для уточнения запроса.
    GET /api/orders?status=shipped&sort=-date&page=2&limit=20
  3. Кеширование: GET-запросы могут и должны кешироваться на стороне браузера, прокси-серверов или CDN, что критически важно для производительности.

Ограничения и важные для тестирования аспекты:

  • Длина URL: Ограничена (обычно ~2048-4096 символов), что нужно проверять при передаче длинных параметров.
  • Видимость данных: Параметры передаются в URL, поэтому не подходят для конфиденциальных данных (пароли, токены).
  • Семантика: Нельзя использовать GET для операций, изменяющих данные (создание, обновление, удаление). Для этого существуют POST, PUT, PATCH, DELETE.

Пример теста на Python (pytest + requests):

import requests

def test_get_request_returns_valid_data_and_status():
    # Тестируем получение списка с пагинацией
    response = requests.get('https://api.example.com/users', params={'page': 1, 'limit': 10})

    assert response.status_code == 200
    data = response.json()
    assert isinstance(data, list)
    assert len(data) <= 10  # Проверяем лимит
    assert 'id' in data[0]  # Проверяем структуру элемента