Skip to content

Latest commit

 

History

History
183 lines (136 loc) · 7.36 KB

File metadata and controls

183 lines (136 loc) · 7.36 KB

Azure Functions OpenAPI

PyPI Python Version CI Release Security Scans codecov pre-commit Docs License: MIT

다른 언어: English | 日本語 | 简体中文

Azure Functions Python v2 프로그래밍 모델을 위한 OpenAPI(Swagger) 문서화와 Swagger UI를 제공합니다.

Why Use It

Azure Functions HTTP API를 문서화하려면 일반적으로 별도의 OpenAPI 스펙을 수동으로 유지해야 합니다. azure-functions-openapi는 데코레이터가 적용된 핸들러에서 자동으로 스펙을 생성하여 문서와 코드를 항상 동기화된 상태로 유지합니다.

Scope

  • Azure Functions Python v2 프로그래밍 모델
  • decorator 기반 func.FunctionApp() 애플리케이션
  • @openapi로 문서화된 HTTP 트리거 함수
  • 선택적 Pydantic 스키마 생성(Pydantic v1, v2 모두 지원)

이 패키지는 기존 function.json 기반의 v1 프로그래밍 모델은 지원하지 않습니다.

Features

  • operation 메타데이터를 위한 @openapi decorator
  • /openapi.json, /openapi.yaml, /docs 엔드포인트
  • query, path, header, body, response 스키마 지원
  • 보안 기본값이 포함된 Swagger UI helper
  • 생성 및 검증 워크플로를 위한 CLI 도구

Installation

pip install azure-functions-openapi

Function App 의존성에는 다음이 포함되어야 합니다.

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",
    method="post",
    request_body={
        "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 func.HttpResponse(
        get_openapi_json(
            title="Sample API",
            description="OpenAPI document for the Sample API.",
        ),
        mimetype="application/json",
    )


@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 func.HttpResponse(
        get_openapi_yaml(
            title="Sample API",
            description="OpenAPI document for the Sample API.",
        ),
        mimetype="application/x-yaml",
    )


@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()

로컬에서는 Azure Functions Core Tools로 실행할 수 있습니다.

func start

Demo

대표 webhook_receiver 예제는 이 라이브러리를 도입했을 때의 전체 결과를 보여줍니다.

  • Azure Functions v2 HTTP 핸들러에 @openapi를 추가합니다.
  • 패키지가 해당 라우트에 대한 실제 OpenAPI 문서를 생성합니다.
  • 같은 라우트가 브라우저에서 확인할 수 있도록 Swagger UI로 렌더링됩니다.

Generated Spec Result

생성된 OpenAPI 파일은 같은 예제 실행 결과에서 정적 미리보기로 캡처되었습니다. 따라서 이 README에는 대표 함수가 실제로 생성한 문서가 그대로 표시됩니다.

OpenAPI spec preview

Swagger UI Result

아래 웹 미리보기 역시 같은 대표 예제에서 생성되었으며, 해당 예제 흐름이 만든 Swagger UI 페이지를 자동으로 렌더링해 캡처한 결과입니다.

OpenAPI Swagger UI preview

Documentation

Ecosystem

Disclaimer

이 프로젝트는 독립적인 커뮤니티 프로젝트이며 Microsoft와 제휴되어 있지 않고, Microsoft의 후원이나 유지보수를 받지 않습니다.

Azure 및 Azure Functions는 Microsoft Corporation의 상표입니다.

License

MIT