Получить типизированное значение и метаданные#
HttpOperation[Order] объявляет обычный успешный ответ: статус 200, JSON-тело и модель
Order. Метод with_response(...) выполняет ту же операцию, но возвращает
ResponseEnvelope[Order] с HTTP-метаданными.
Дополнительное объявление не нужно.
→ Request · GET /orders/order-42
← Response · 200 OK
X-Request-ID: request-42
Content-Type: application/json
{"id": "order-42", "status": "paid", "total": 12900}
# examples/docs/response_success.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetOrder(HttpOperation[Order]):
__http__ = Http.get("/orders/{order_id}")
order_id: Path[str]
class OrdersApi(SyncApi):
get = op(GetOrder)
Обычный get(...) вернул бы Order. В примере .with_response(...) сохраняет его в .value,
статус в .status_code, заголовки в .headers, а исходный объект обработчика в
.response.raw_response.
Файл примера целиком
"""Read a typed value together with HTTP response metadata."""
from __future__ import annotations
from dataclasses import dataclass
from eazy_sdk import Http, HttpOperation, Path, SyncApi, op
from examples.docs.request_site import request_client
@dataclass(frozen=True, slots=True)
class Order:
id: str
status: str
total: int
# docs:example:start
# examples/docs/response_success.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetOrder(HttpOperation[Order]):
__http__ = Http.get("/orders/{order_id}")
order_id: Path[str]
class OrdersApi(SyncApi):
get = op(GetOrder)
# docs:example:end
def main() -> None:
with request_client() as client:
response = OrdersApi(client).get.with_response(order_id="order-42")
print(f"status: {response.status_code}")
print(f"order: {response.value.id} {response.value.status}")
print(f"request id: {response.headers['x-request-id']}")
if __name__ == "__main__":
main()
Запуск: uv run python examples/docs/response_success.py.
status: 200
order: order-42 paid
request id: request-42
Объявить несколько успешных случаев#
Используйте success=, когда операция возвращает разные модели или особый статус. Например,
success={201: Order, 202: AcceptedOrder} различает созданный и принятый в обработку заказ.
Значением может быть модель, Json, Text, Bytes, Empty или список представлений. Условие
when= различает формы с одинаковым статусом. Тип результата операции должен включать все
возможные значения.
Строка str означает текст, bytes означает бинарное тело, а None означает пустой ответ.
Явные представления нужны, когда контракт задаёт особый тип содержимого, условие или способ
разбора.