OpenAPI (Swagger) integration for Azure Functions Python v2 programming model
Project description
azure-functions-openapi
OpenAPI (Swagger) documentation and Swagger UI for the Azure Functions Python v2 programming model.
Scope
- Azure Functions Python v2 programming model
- Decorator-based
func.FunctionApp()applications - HTTP-triggered functions documented with
@openapi - Optional Pydantic schema generation (supports both Pydantic v1 and v2)
This package does not support the legacy function.json-based v1 programming model.
Features
@openapidecorator for operation metadata/openapi.json,/openapi.yaml, and/docsendpoints- Query, path, header, body, and response schema support
- Swagger UI helper with security defaults
- CLI tooling for generation and validation workflows
Demo
The representative hello_openapi example shows the full outcome of adopting this library:
- You annotate an Azure Functions v2 HTTP handler with
@openapi. - The package generates a real OpenAPI document for that route.
- The same route is rendered in Swagger UI for browser-based inspection.
Generated Spec Result
The generated OpenAPI file is captured as a static preview from the same example run, so the README shows the actual document produced by the representative function.
Swagger UI Result
The web preview below is generated from the same representative example and captured automatically from the rendered Swagger UI page produced by that example flow.
Installation
pip install azure-functions-openapi
Your Function App dependencies should include:
azure-functions
azure-functions-openapi
Quick Start
import json
import azure.functions as func
from azure_functions_openapi.decorator import openapi
from azure_functions_openapi.openapi import get_openapi_json, get_openapi_yaml
from azure_functions_openapi.swagger_ui import render_swagger_ui
app = func.FunctionApp()
@app.function_name(name="http_trigger")
@app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS, methods=["POST"])
@openapi(
summary="Greet user",
route="/api/http_trigger",
request_body={
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {"name": {"type": "string"}},
"required": ["name"],
}
}
}
},
response={
200: {
"description": "Successful greeting",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {"message": {"type": "string"}},
}
}
},
}
},
tags=["Example"],
)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
data = req.get_json()
name = data.get("name", "world")
return func.HttpResponse(
json.dumps({"message": f"Hello, {name}!"}),
mimetype="application/json",
)
@app.function_name(name="openapi_json")
@app.route(route="openapi.json", auth_level=func.AuthLevel.ANONYMOUS, methods=["GET"])
def openapi_json(req: func.HttpRequest) -> func.HttpResponse:
return get_openapi_json(
title="Sample API",
description="OpenAPI document for the Sample API.",
)
@app.function_name(name="openapi_yaml")
@app.route(route="openapi.yaml", auth_level=func.AuthLevel.ANONYMOUS, methods=["GET"])
def openapi_yaml(req: func.HttpRequest) -> func.HttpResponse:
return get_openapi_yaml(
title="Sample API",
description="OpenAPI document for the Sample API.",
)
@app.function_name(name="swagger_ui")
@app.route(route="docs", auth_level=func.AuthLevel.ANONYMOUS, methods=["GET"])
def swagger_ui(req: func.HttpRequest) -> func.HttpResponse:
return render_swagger_ui()
Run locally with Azure Functions Core Tools:
func start
Documentation
- Full docs: yeongseon.github.io/azure-functions-openapi
- Smoke-tested examples:
examples/ - Installation Guide
- Usage Guide
- API Reference
- CLI Guide
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azure_functions_openapi-0.12.1.tar.gz.
File metadata
- Download URL: azure_functions_openapi-0.12.1.tar.gz
- Upload date:
- Size: 336.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b845deff164289c408fa1e128a797008ead4fbe2bcad01d81e0d738fcdda8dd
|
|
| MD5 |
793d16cabaa51946d1cc2ce7d9877609
|
|
| BLAKE2b-256 |
3353523ccb3137a9d3ba3917e9adbc15dcb72c274ba3cc652625cb22b7268834
|
Provenance
The following attestation bundles were made for azure_functions_openapi-0.12.1.tar.gz:
Publisher:
release.yml on yeongseon/azure-functions-openapi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azure_functions_openapi-0.12.1.tar.gz -
Subject digest:
0b845deff164289c408fa1e128a797008ead4fbe2bcad01d81e0d738fcdda8dd - Sigstore transparency entry: 1065572461
- Sigstore integration time:
-
Permalink:
yeongseon/azure-functions-openapi@0e7e6878a35d2d03fb6ba9a3d4a3f3d1b873a8b2 -
Branch / Tag:
refs/tags/v0.12.1 - Owner: https://github.com/yeongseon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0e7e6878a35d2d03fb6ba9a3d4a3f3d1b873a8b2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file azure_functions_openapi-0.12.1-py3-none-any.whl.
File metadata
- Download URL: azure_functions_openapi-0.12.1-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c66d5977cb5d1990aabd2b0902412c313318a9fdfe2dcafc43ab57ce8e2b5e1e
|
|
| MD5 |
7d9eda3b2164c30820cd33f74db12bba
|
|
| BLAKE2b-256 |
8c1912e893a06202234e49ee5f9ac976db7d2341c1871455b9aebeedf6be9779
|
Provenance
The following attestation bundles were made for azure_functions_openapi-0.12.1-py3-none-any.whl:
Publisher:
release.yml on yeongseon/azure-functions-openapi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azure_functions_openapi-0.12.1-py3-none-any.whl -
Subject digest:
c66d5977cb5d1990aabd2b0902412c313318a9fdfe2dcafc43ab57ce8e2b5e1e - Sigstore transparency entry: 1065572507
- Sigstore integration time:
-
Permalink:
yeongseon/azure-functions-openapi@0e7e6878a35d2d03fb6ba9a3d4a3f3d1b873a8b2 -
Branch / Tag:
refs/tags/v0.12.1 - Owner: https://github.com/yeongseon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0e7e6878a35d2d03fb6ba9a3d4a3f3d1b873a8b2 -
Trigger Event:
push
-
Statement type: