Spec-First Routing
Summary
The OpenAPI document is the single source of truth for the HTTP contract. Handlers are bound to it by name; there is no decorator router.
The contract
openapi.yaml(or.json) declares paths, schemas, parameters, responses, and security.- A custom
operationIdnames the handler function. - The framework (
openapi_first) validates requests/responses against the spec and dispatches to the handler whose name equalsoperationId.
App bootstrap
lifespan calls the composition root:
Handler registry
interfaces/openapi.py is a flat re-export of every handler, so the framework
can resolve operationId across the whole app:
Handler shape
Handlers are thin and synchronous with respect to business logic:
Conventions
operationIdnaming:list_<resource>,create_<resource>,get_<resource>,update_<resource>,delete_<resource>.- Read-only endpoints may use a cache decorator keyed on path + query + user.
- Validation errors ->
400; not found ->404; delete ->204. - Security is declared once in the spec and enforced by the framework; handlers contain no auth code.
Codegen
The openapi_first library can scaffold models and route stubs from the spec,
and ships app templates (CRUD app, model app, service). Prefer codegen over
hand-writing boilerplate.