Добавить параметры запроса#
Используйте 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
задаёт порядок параметров и правило кодирования пробелов, если сервер различает эти варианты.