Отправить 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.