Отправить JSON-объект#

Объявите каждое поле плоского JSON как JsonField[T]. Вызов получит точную сигнатуру без словаря body, а SDK проверит обязательные значения до отправки.

→ Request · POST /users

{"name": "Ada", "tags": ["admin"]}

← Response · 201 Created

{"id": 42, "name": "Ada"}
# examples/docs/request_json.py
@dataclass(frozen=True, slots=True, kw_only=True)
class CreateUser(HttpOperation[User]):
    __http__ = Http.post("/users", success={201: User})

    name: JsonField[str]
    tags: JsonField[list[str]] = field(default_factory=list)
    note: JsonField[Omittable[str]] = UNSET


class UsersApi(SyncApi):
    create = op(CreateUser)

Для tags создаётся новый список при каждом вызове. note=UNSET не попадает в объект. Явное note=None станет JSON null, если аннотация разрешает None.

Файл примера целиком
"""Encode operation fields as a JSON object."""

from __future__ import annotations

from dataclasses import dataclass, field

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


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


# docs:example:start
# examples/docs/request_json.py
@dataclass(frozen=True, slots=True, kw_only=True)
class CreateUser(HttpOperation[User]):
    __http__ = Http.post("/users", success={201: User})

    name: JsonField[str]
    tags: JsonField[list[str]] = field(default_factory=list)
    note: JsonField[Omittable[str]] = UNSET


class UsersApi(SyncApi):
    create = op(CreateUser)
# docs:example:end


def main() -> None:
    with request_client() as client:
        user = UsersApi(client).create(name="Ada", tags=["admin"])

    print(f"created: {user.id} {user.name}")


if __name__ == "__main__":
    main()

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

created: 42 Ada

Для одного вложенного документа используйте модель с markers.JsonBody(). Её адаптер отвечает за псевдонимы, значения по умолчанию и исключение полей. Не смешивайте корневое тело с JsonField в одной операции. Если публичные поля должны превратиться в другую структуру, используйте BodyProjection.

Дальше#