Добавить параметры запроса#

Используйте Query[T] для параметров после ?. Обычное значение по умолчанию отправляется. Поле Omittable[T] = UNSET исчезает из запроса, пока вызывающий его не передал.

Так URL остаётся коротким.

→ Request · GET /users?q=ada

← Response · 200 OK

[{"id": 42, "name": "Ada", "query": "ada"}]
# examples/docs/request_query.py
@dataclass(frozen=True, slots=True, kw_only=True)
class SearchUsers(HttpOperation[list[User]]):
    __http__ = Http.get("/users")

    q: Query[str]
    limit: Query[Omittable[int]] = UNSET


class UsersApi(SyncApi):
    search = op(SearchUsers)

q обязателен. limit не попадает в URL при значении UNSET. Если аннотация допускает None, явное значение None кодируется отдельно и не считается пропущенным полем.

Файл примера целиком
"""Send required and omitted query parameters."""

from __future__ import annotations

from dataclasses import dataclass

from eazy_sdk import UNSET, Http, HttpOperation, Omittable, Query, SyncApi, op
from examples.docs.request_site import request_client


@dataclass(frozen=True, slots=True)
class User:
    id: int
    name: str
    query: str


# docs:example:start
# examples/docs/request_query.py
@dataclass(frozen=True, slots=True, kw_only=True)
class SearchUsers(HttpOperation[list[User]]):
    __http__ = Http.get("/users")

    q: Query[str]
    limit: Query[Omittable[int]] = UNSET


class UsersApi(SyncApi):
    search = op(SearchUsers)
# docs:example:end


def main() -> None:
    with request_client() as client:
        users = UsersApi(client).search(q="ada")

    print(f"query: {users[0].query}; result: {users[0].name}")


if __name__ == "__main__":
    main()

Запуск: uv run python examples/docs/request_query.py.

query: ada; result: Ada

Для другого имени на проводе укажите markers.Query("page-size"). Параметры style, explode и allow_reserved управляют совместимой с OpenAPI сериализацией сложных значений. Wire задаёт порядок параметров и правило кодирования пробелов, если сервер различает эти варианты.

Дальше#