--- title: Объявить HTTP-операцию description: Выберите класс операции для полного контракта или декоратор для короткого метода. sources: - eazy_sdk.api - eazy_sdk.operation draft: false api_fingerprint: "sha256:4a81cfb7bf9d2f8984226f5bbe39b753307b3541f356f7717cacff1f085d7795" --- Объявите запрос неизменяемым классом `HttpOperation[T]`. Поля класса становятся аргументами вызова, `__http__` хранит HTTP-контракт, а `op(...)` публикует операцию на роутере. Редактор кода видит сигнатуру до запуска программы. Это основной вариант. Он сохраняет отдельный тип запроса, поддерживает фабрики значений по умолчанию и позволяет переиспользовать общие поля через обычное наследование моделей. :::::{grid} 1 1 2 2 :class-container: http-exchange :gutter: 2 ::::{grid-item} :class: http-panel http-panel--request **→ Request** · ``POST /orders`` ```json {"item": "keyboard"} ``` :::: ::::{grid-item} :class: http-panel http-panel--response **← Response** · ``201 Created`` ```json {"id": "order-42", "item": "keyboard"} ``` :::: ::::: ## Объявить операцию классом ```{literalinclude} ../../../../../../examples/docs/request_declaration.py :language: python :start-after: "# docs:class:start" :end-before: "# docs:class:end" ``` `Order` задаёт тип успешного ответа. `success={201: Order}` связывает статус `201` с этой моделью. Маркер `JsonField[str]` помещает `item` в JSON-тело. `kw_only=True` делает все аргументы именованными, поэтому добавление нового поля не меняет смысл старых вызовов. ## Использовать короткий декоратор ```{literalinclude} ../../../../../../examples/docs/request_declaration.py :language: python :start-after: "# docs:decorator:start" :end-before: "# docs:decorator:end" ``` Декоратор синтезирует такой же неизменяемый класс и публикует его тем же дескриптором. Python не выполняет тело метода во время вызова SDK. Полученный класс доступен как `CompactOrdersApi.create.Operation`. :::{dropdown} Файл примера целиком ```{literalinclude} ../../../../../../examples/docs/request_declaration.py :language: python ``` ::: Запуск: `uv run python examples/docs/request_declaration.py`. ```text class: order-42 keyboard decorator: order-42 mouse ``` | Задача | Класс и `op(...)` | Декоратор | |---|---|---| | `default_factory`, наследование полей, проекция | подходит | ограничен сигнатурой метода | | запрос как отдельное значение | прямой класс операции | синтезированный `.Operation` | | короткая операция без сложного тела | больше строк | компактнее | ## Дальше - {doc}`Добавьте значение в путь `. - {doc}`Отправьте JSON `. - {doc}`Работайте с запросом как со значением `.