Что такое query-параметры в HTTP-запросах

Ответ

Query-параметры (параметры запроса) — это часть URL, используемая для передачи данных на сервер в виде пар ключ=значение. Они следуют за знаком вопроса (?) и разделяются амперсандом (&).

Они не изменяют сам ресурс (путь), а уточняют запрос к нему.

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

  • Фильтрация: ?status=active&author_id=123
  • Сортировка: ?sort_by=date&order=desc
  • Пагинация: ?page=2&limit=10
  • Поиск: ?q=fastapi+tutorial

Пример URL: https://api.example.com/items?limit=20&sort_by=price&status=available

Пример обработки в FastAPI (Python):

FastAPI автоматически извлекает, преобразует и валидирует параметры из URL на основе аннотаций типов.

from fastapi import FastAPI
from typing import Optional

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = None, limit: int = 10, is_active: bool = True):
    """
    Принимает параметры:
    - q: необязательная строка для поиска
    - limit: целочисленный лимит (по умолчанию 10)
    - is_active: булевый флаг (по умолчанию True)
    """
    query_params = {"q": q, "limit": limit, "is_active": is_active}
    # ... логика фильтрации данных на основе query_params ...
    return {"params_received": query_params}

# Пример запроса к этому эндпоинту:
# /items/?q=my-item&limit=50&is_active=false

Ключевые характеристики:

  • Они видны в URL, поэтому не подходят для передачи конфиденциальных данных (паролей, токенов).
  • Всегда передаются как строки, и сервер отвечает за их преобразование в нужные типы (например, int, bool).
  • Являются стандартным и универсальным способом уточнения GET-запросов.

Ответ 18+ 🔞

Давай разберём, что это за зверь такой — query-параметры. Представь, что ты заходишь в интернет-магазин, как в ларёк, и говоришь продавцу: «Дайте мне три шаурмы, но только острую, и чтобы с двойным сыром». Вот эти твои пожелания — «три», «острая», «двойной сыр» — это и есть query-параметры, сука! Они не меняют сам магазин, а просто уточняют, какую именно хуйню ты хочешь получить.

Где они живут в адресе? Прямо после знака вопроса (?), как грязь под ногтями. Если параметров несколько, они цепляются друг за друга амперсандом (&), словно пьяная компания.

Пример URL, чтоб ты понимал масштаб: https://api.shawarma-palace.com/orders?count=3&spicy=true&cheese=double

Зачем они, блядь, нужны?

  • Отфильтровать хуйню: ?status=active&author=admin — покажи только активное и от админа.
  • Отсортировать как человек: ?sort=price&order=desc — дай самое дорогое сначала, я не нищий.
  • Разбить на страницы, чтоб не сдохнуть: ?page=5&limit=20 — дай пятую пачку по 20 штук.
  • Найти что-то в этой свалке: ?search=fastapi+guide — ищи мне гайд, а не левые видео с котиками.

А вот как это выглядит в коде на FastAPI, если ты вдруг решил стать backend-разработчиком:

from fastapi import FastAPI
from typing import Optional

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = None, limit: int = 10, is_active: bool = True):
    """
    Принимает параметры:
    - q: необязательная строка для поиска
    - limit: целочисленный лимит (по умолчанию 10)
    - is_active: булевый флаг (по умолчанию True)
    """
    query_params = {"q": q, "limit": limit, "is_active": is_active}
    # ... логика фильтрации данных на основе query_params ...
    return {"params_received": query_params}

# Пример запроса к этому эндпоинту:
# /items/?q=my-item&limit=50&is_active=false

Смотри, какая магия: ты просто объявляешь параметры в функции, а FastAPI сам, как хитрая жопа, выковыривает их из URL, преобразует в нужный тип (число, булево значение) и валидирует. Красота, ёпта!

Важное предупреждение, чтоб ты не обосрался:

  • Они видны всем в адресной строке. Никогда, слышишь, НИКОГДА не пихай туда пароли, токены или номер своей кредитки! Это как кричать о своём PIN-коде в переполненном автобусе.
  • Все значения приходят как строки, но твой фреймворк (если он не говно) должен уметь превращать их в числа, даты и прочую полезную хуйню.
  • Это стандартный, универсальный способ настрогать GET-запрос по своему вкусу. Пользуйся, но с умом, а то мало ли.