OpenAPI Core

0.23.1 · active · verified Thu Apr 09

openapi-core provides client-side and server-side support for validating requests and responses against the OpenAPI Specification v3.x and v3.2. It integrates with various web frameworks like Flask, Starlette, Falcon, Django, and aiohttp. The current version is 0.23.1, with a frequent release cadence to support new Python versions and framework updates.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates loading an OpenAPI specification, creating mock requests and responses, and then using `RequestValidator` and `ResponseValidator` to validate them against the loaded spec. It covers both request parameters and response body validation. In real-world scenarios, you would use framework-specific request/response wrappers (e.g., `FlaskRequest`, `StarletteRequest`).

import io
from openapi_core import OpenAPI
from openapi_core.validation.request.validators import RequestValidator
from openapi_core.validation.response.validators import ResponseValidator
from openapi_core.wrappers.mock import MockRequest, MockResponse

# Define a simple OpenAPI spec
oas_spec = {
    "openapi": "3.0.0",
    "info": {"title": "Test API", "version": "1.0.0"},
    "paths": {
        "/hello": {
            "get": {
                "parameters": [
                    {
                        "name": "name",
                        "in": "query",
                        "required": True,
                        "schema": {"type": "string"}
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A greeting",
                        "content": {
                            "application/json": {
                                "schema": {"type": "object", "properties": {"message": {"type": "string"}}}
                            }
                        }
                    }
                }
            }
        }
    }
}

# Load the OpenAPI specification
openapi = OpenAPI.from_dict(oas_spec)

# --- Request Validation ---

# Create a mock request for validation
request = MockRequest(
    host_url="http://localhost",
    path="/hello",
    method="get",
    query_string="name=World"
)

validator = RequestValidator(openapi)
result = validator.validate(request)

if result.errors:
    print(f"Request validation errors: {result.errors}")
else:
    print("Request validated successfully.")
    # Access validated parameters
    print(f"Validated query parameters: {result.parameters.query}")

# --- Response Validation ---

# Create a mock response for validation
response = MockResponse(
    data=io.BytesIO(b'{"message": "Hello, World!"}'),
    status_code=200,
    mimetype="application/json"
)

validator = ResponseValidator(openapi)
result = validator.validate(request, response)

if result.errors:
    print(f"Response validation errors: {result.errors}")
else:
    print("Response validated successfully.")

view raw JSON →