Quart-Schema is a Quart extension that provides schema validation and auto-generated API documentation. This is particularly useful when writing RESTful APIs.
Quart-Schema can use either msgspec or pydantic to validate.
Quart-Schema can validate an existing Quart route by decorating it
with validate_querystring
, validate_request
, or
validate_response
. It can also validate the JSON data sent and
received over websockets using the send_as
and receive_as
methods.
from dataclasses import dataclass
from datetime import datetime
from quart import Quart, websocket
from quart_schema import QuartSchema, validate_request, validate_response
app = Quart(__name__)
QuartSchema(app)
@dataclass
class Todo:
task: str
due: datetime | None
@app.post("/")
@validate_request(Todo)
@validate_response(Todo, 201)
async def create_todo(data: Todo) -> tuple[Todo, int]:
... # Do something with data, e.g. save to the DB
return data, 201
@app.websocket("/ws")
async def ws() -> None:
while True:
data = await websocket.receive_as(Todo)
... # Do something with data, e.g. save to the DB
await websocket.send_as(data, Todo)
The documentation is served by default at /openapi.json
according
to the OpenAPI standard, or at /docs
for a SwaggerUI interface, or /redocs
for
a redoc interface, or
/scalar
for a Scalar
interface. Note that there is currently no documentation standard for
WebSockets.
Quart-Schema is developed on GitHub. If you come across an issue, or have a feature request please open an issue. If you want to contribute a fix or the feature-implementation please do (typo fixes welcome), by proposing a merge request.
The best way to test Quart-Schema is with Tox,
$ pip install tox
$ tox
this will check the code style and run the tests.
The Quart-Schema documentation is the best places to start, after that try searching stack overflow or ask for help on gitter. If you still can't find an answer please open an issue.