Openapi-core integrates with your popular libraries and frameworks. Each integration offers different levels of integration that help validate and unmarshal your request and response data.
This section describes integration with Amazon API Gateway.
- It is useful for:
- AWS Lambda integrations where Lambda functions handle events from API Gateway (Amazon API Gateway event format version 1.0 and 2.0).
- AWS Lambda function URLs where Lambda functions handle events from dedicated HTTP(S) endpoint (Amazon API Gateway event format version 2.0).
You can use APIGatewayEventV2OpenAPIRequest as an API Gateway event (format version 2.0) request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.aws import APIGatewayEventV2OpenAPIRequest
openapi_request = APIGatewayEventV2OpenAPIRequest(event)
result = unmarshal_request(openapi_request, spec=spec)If you use format version 1.0, then import and use APIGatewayEventOpenAPIRequest as an API Gateway event (format version 1.0) request factory.
You can use APIGatewayEventV2ResponseOpenAPIResponse as an API Gateway event (format version 2.0) response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.aws import APIGatewayEventV2ResponseOpenAPIResponse
openapi_response = APIGatewayEventV2ResponseOpenAPIResponse(response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)If you use format version 1.0, then import and use APIGatewayEventResponseOpenAPIResponse as an API Gateway event (format version 1.0) response factory.
API Gateway have special ANY method that catches all HTTP methods. It's specified as x-amazon-apigateway-any-method OpenAPI extension. If you use the extension, you want to define path_finder_cls to be APIGatewayPathFinder:
from openapi_core.contrib.aws import APIGatewayPathFinder
result = unmarshal_response(
openapi_request,
openapi_response,
spec=spec,
path_finder_cls=APIGatewayPathFinder,
)See bottle-openapi-3 project.
This section describes integration with Django web framework. The integration supports Django from version 3.0 and above.
Django can be integrated by middleware. Add DjangoOpenAPIMiddleware to your MIDDLEWARE list and define OPENAPI_SPEC.
# settings.py
from openapi_core import Spec
MIDDLEWARE = [
# ...
'openapi_core.contrib.django.middlewares.DjangoOpenAPIMiddleware',
]
OPENAPI_SPEC = Spec.from_dict(spec_dict)After that you have access to unmarshal result object with all validated request data from Django view through request object.
from django.views import View
class MyView(View):
def get(self, req):
# get parameters object with path, query, cookies and headers parameters
validated_params = req.openapi.parameters
# or specific location parameters
validated_path_params = req.openapi.parameters.path
# get body
validated_body = req.openapi.body
# get security data
validated_security = req.openapi.securityYou can use DjangoOpenAPIRequest as a Django request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.django import DjangoOpenAPIRequest
openapi_request = DjangoOpenAPIRequest(django_request)
result = unmarshal_request(openapi_request, spec=spec)You can use DjangoOpenAPIResponse as a Django response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.django import DjangoOpenAPIResponse
openapi_response = DjangoOpenAPIResponse(django_response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)This section describes integration with Falcon web framework. The integration supports Falcon from version 3.0 and above.
The Falcon API can be integrated by FalconOpenAPIMiddleware middleware.
from openapi_core.contrib.falcon.middlewares import FalconOpenAPIMiddleware
openapi_middleware = FalconOpenAPIMiddleware.from_spec(spec)
app = falcon.App(middleware=[openapi_middleware])After that you will have access to validation result object with all validated request data from Falcon view through request context.
class ThingsResource:
def on_get(self, req, resp):
# get parameters object with path, query, cookies and headers parameters
validated_params = req.context.openapi.parameters
# or specific location parameters
validated_path_params = req.context.openapi.parameters.path
# get body
validated_body = req.context.openapi.body
# get security data
validated_security = req.context.openapi.securityYou can use FalconOpenAPIRequest as a Falcon request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.falcon import FalconOpenAPIRequest
openapi_request = FalconOpenAPIRequest(falcon_request)
result = unmarshal_request(openapi_request, spec=spec)You can use FalconOpenAPIResponse as a Falcon response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.falcon import FalconOpenAPIResponse
openapi_response = FalconOpenAPIResponse(falcon_response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)This section describes integration with Flask web framework.
Flask views can be integrated by FlaskOpenAPIViewDecorator decorator.
from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator
openapi = FlaskOpenAPIViewDecorator.from_spec(spec)
@app.route('/home')
@openapi
def home():
passIf you want to decorate class based view you can use the decorators attribute:
class MyView(View):
decorators = [openapi]As an alternative to the decorator-based integration, a Flask method based views can be integrated by inheritance from FlaskOpenAPIView class.
from openapi_core.contrib.flask.views import FlaskOpenAPIView
class MyView(FlaskOpenAPIView):
pass
app.add_url_rule('/home', view_func=MyView.as_view('home', spec))In Flask, all unmarshalled request data are provided as Flask request object's openapi.parameters attribute
from flask.globals import request
@app.route('/browse/<id>/')
@openapi
def home():
browse_id = request.openapi.parameters.path['id']
page = request.openapi.parameters.query.get('page', 1)You can use FlaskOpenAPIRequest as a Flask request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.flask import FlaskOpenAPIRequest
openapi_request = FlaskOpenAPIRequest(flask_request)
result = unmarshal_request(openapi_request, spec=spec)For response factory see Werkzeug integration.
See pyramid_openapi3 project.
This section describes integration with Requests library.
You can use RequestsOpenAPIRequest as a Requests request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.requests import RequestsOpenAPIRequest
openapi_request = RequestsOpenAPIRequest(requests_request)
result = unmarshal_request(openapi_request, spec=spec)You can use RequestsOpenAPIResponse as a Requests response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.requests import RequestsOpenAPIResponse
openapi_response = RequestsOpenAPIResponse(requests_response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)You can use RequestsOpenAPIWebhookRequest as a Requests webhook request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.requests import RequestsOpenAPIWebhookRequest
openapi_webhook_request = RequestsOpenAPIWebhookRequest(requests_request, "my_webhook")
result = unmarshal_request(openapi_webhook_request, spec=spec)This section describes integration with Starlette ASGI framework.
You can use StarletteOpenAPIRequest as a Starlette request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.starlette import StarletteOpenAPIRequest
openapi_request = StarletteOpenAPIRequest(starlette_request)
result = unmarshal_request(openapi_request, spec=spec)You can use StarletteOpenAPIResponse as a Starlette response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.starlette import StarletteOpenAPIResponse
openapi_response = StarletteOpenAPIResponse(starlette_response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)See tornado-openapi3 project.
This section describes integration with Werkzeug a WSGI web application library.
You can use WerkzeugOpenAPIRequest as a Werkzeug request factory:
from openapi_core import unmarshal_request
from openapi_core.contrib.werkzeug import WerkzeugOpenAPIRequest
openapi_request = WerkzeugOpenAPIRequest(werkzeug_request)
result = unmarshal_request(openapi_request, spec=spec)You can use WerkzeugOpenAPIResponse as a Werkzeug response factory:
from openapi_core import unmarshal_response
from openapi_core.contrib.werkzeug import WerkzeugOpenAPIResponse
openapi_response = WerkzeugOpenAPIResponse(werkzeug_response)
result = unmarshal_response(openapi_request, openapi_response, spec=spec)