Schemas — Aquilia Documentation
Comprehensive guide and documentation for Schemas in the Aquilia framework. View API reference, examples, and implementation patterns.
Contracts / OpenAPI Schemas OpenAPI Schemas Contracts auto-generate JSON Schema and OpenAPI component schemas. Every Facet contributes its schema fragment, and Projections produce per-view schemas — all without manual schema writing. Generating JSON Schema from aquilia.contracts.schema import generate_schema # Generate JSON Schema for a Contract schema = generate_schema(ProductContract) print(schema) # , # "name": , # "price": , # "sku": , # "category": , # "is_active": , # "tags": }, # }, # "required": ["name", "price", "sku"] # } # Schema for a specific projection schema = ProductContract.to_schema(projection="__minimal__") # Only includes: id, name, price, slug # Schema for input mode (excludes read_only fields) schema = ProductContract.to_schema(mode="input") # Schema for output mode (excludes write_only fields) schema = ProductContract.to_schema(mode="output") OpenAPI Component Schemas Generate OpenAPI components.schemas for multiple Contracts at once, with per-projection variants: from aquilia.contracts.schema import generate_component_schemas # Generate component schemas for all Contracts components = generate_component_schemas([ ProductContract, UserContract, OrderContract, ]) print(components) # , # "ProductContract_minimal": , # "ProductContract_detail": , # "UserContract": , # "OrderContract": , # } # This output slots directly into your OpenAPI spec: # openapi_spec["components"]["schemas"] = components Per-Facet Schema Output Each Facet type generates appropriate JSON Schema fragments: Facet JSON Schema Output ' }, ' }, ' }, ' }, ' }, ' }, ' }, ' }, ' }, ' }, , "minItems": N, "maxItems": N}' }, }' }, ' }, ' }, ].map((row, i) => ( ))} Integration with OpenAPI Endpoint from aquilia import Controller, Get from aquilia.contracts.schema import generate_component_schemas from myapp.contracts import ProductContract, UserContract, OrderContract class OpenAPIController(Controller): prefix = "/api" @Get("/openapi.json") async def openapi_spec(self, ctx): schemas = generate_component_schemas([ ProductContract, UserContract, OrderContract, ]) spec = , "components": , "paths": # Your route definitions } return ctx.json(spec) )
Go to Homepage