Для чего используется метод GET в HTTP

«Для чего используется метод GET в HTTP» — вопрос из категории ООП, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод GET в HTTP я использую для идемпотентных операций получения данных, которые не изменяют состояние сервера. Это фундаментальный принцип RESTful API и веб-разработки.

Правильное использование в PHP-приложениях:

// Контроллер для получения списка пользователей с фильтрацией
public function listUsers(Request $request): JsonResponse
{
    // Валидация и санитизация GET-параметров
    $page = filter_var(
        $request->query->get('page', 1), 
        FILTER_VALIDATE_INT, 
        ['options' => ['min_range' => 1, 'default' => 1]]
    );

    $limit = filter_var(
        $request->query->get('limit', 20),
        FILTER_VALIDATE_INT,
        ['options' => ['min_range' => 1, 'max_range' => 100, 'default' => 20]]
    );

    $search = htmlspecialchars(
        $request->query->get('search', ''),
        ENT_QUOTES,
        'UTF-8'
    );

    // Использование в запросе
    $users = $this->userRepository->findPaginated(
        page: $page,
        limit: $limit,
        searchTerm: $search
    );

    return new JsonResponse([
        'data' => $users,
        'meta' => [
            'page' => $page,
            'limit' => $limit,
            'total' => count($users)
        ]
    ]);
}

Ключевые характеристики GET-запросов:

  1. Идемпотентность — многократные одинаковые запросы дают одинаковый результат
  2. Кэшируемость — ответы можно кэшировать на разных уровнях (браузер, CDN, прокси)
  3. Закладки и обмен — URL с GET-параметрами можно сохранять и передавать
  4. Ограничения:
    • Данные в URL (макс ~2000 символов)
    • Параметры видны в истории браузера и логах
    • Не для конфиденциальных данных

Безопасная работа с $_GET:

// НИКОГДА не доверяйте данным из $_GET
$unsafeId = $_GET['id'] ?? '';

// Всегда валидируйте и экранируйте
$id = (int) filter_var($unsafeId, FILTER_VALIDATE_INT);
if ($id <= 0) {
    throw new InvalidArgumentException('Invalid ID');
}

// Для строковых параметров
$query = isset($_GET['q']) 
    ? htmlspecialchars($_GET['q'], ENT_QUOTES, 'UTF-8')
    : '';

Типичные сценарии:

  • Постраничная навигация (?page=2&limit=20)
  • Фильтрация и сортировка (?sort=name&order=asc)
  • Поиск (?q=keyword)
  • Получение ресурсов по ID (/api/users/123)