Skip to content

Latest commit

 

History

History
89 lines (63 loc) · 2.55 KB

File metadata and controls

89 lines (63 loc) · 2.55 KB

Starlette

This section describes integration with the Starlette ASGI framework. The integration supports Starlette versions 0.4x, 0.5x, and 1.x.

Middleware

Starlette can be integrated using middleware to apply OpenAPI validation to your entire application.

Add StarletteOpenAPIMiddleware with the 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.

You also have access to the unmarshalled result object with all unmarshalled request data through the openapi scope of the 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 the 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 an OpenAPI request from a 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 an OpenAPI response from a 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