Starlette¶
This section describes integration with Starlette ASGI framework.
Middleware¶
Starlette can be integrated by middleware to apply OpenAPI validation to your entire application.
Add StarletteOpenAPIMiddleware
with OpenAPI object to your middleware
list.
from openapi_core.contrib.starlette.middlewares import StarletteOpenAPIMiddleware
from starlette.applications import Starlette
from starlette.middleware import Middleware
middleware = [
Middleware(StarletteOpenAPIMiddleware, openapi=openapi),
]
app = Starlette(
# ...
middleware=middleware,
)
After that all your requests and responses will be validated.
Also you have access to unmarshal result object with all unmarshalled request data through openapi
scope of request object.
async def homepage(request):
# get parameters object with path, query, cookies and headers parameters
unmarshalled_params = request.scope["openapi"].parameters
# or specific location parameters
unmarshalled_path_params = request.scope["openapi"].parameters.path
# get body
unmarshalled_body = request.scope["openapi"].body
# get security data
unmarshalled_security = request.scope["openapi"].security
Response validation¶
You can skip response validation process: by setting response_cls
to None
middleware = [
Middleware(StarletteOpenAPIMiddleware, openapi=openapi, response_cls=None),
]
app = Starlette(
# ...
middleware=middleware,
)
Low level¶
The integration defines classes useful for low level integration.
Request¶
Use StarletteOpenAPIRequest
to create OpenAPI request from Starlette request:
from openapi_core.contrib.starlette import StarletteOpenAPIRequest
async def homepage(request):
openapi_request = StarletteOpenAPIRequest(request)
result = openapi.unmarshal_request(openapi_request)
return JSONResponse({'hello': 'world'})
Response¶
Use StarletteOpenAPIResponse
to create OpenAPI response from Starlette response:
from openapi_core.contrib.starlette import StarletteOpenAPIResponse
async def homepage(request):
response = JSONResponse({'hello': 'world'})
openapi_request = StarletteOpenAPIRequest(request)
openapi_response = StarletteOpenAPIResponse(response)
openapi.validate_response(openapi_request, openapi_response)
return response