コンテンツにスキップ

API スキーマ

Starletteは、広く使用されているOpen API仕様などのAPIパターンの生成をサポートしています。(以前は「Swagger」と呼ばれていました。)

スキーマ生成は、app.routes を介してアプリケーション上のルートを調べ、エンドポイント上のドキュメント文字列またはその他の属性を使用して完全なAPIスキーマを決定することによって機能します。

Starletteは、特定のスキーマ生成または検証ツールにバインドされていませんが、ドキュメント文字列に基づいてOpen APIスキーマを生成する単純な実装が含まれています。

Starlette. applicationからStarletteをインポート
from starlette. routingインポートルート
starlette. schemasからSchemaGeneratorをインポート


schemas=SchemaGenerator(スキーマジェネレータ)
    {"openapi":"3.0.0","info":{"title": "Example API", "version": "1.0"}}
)

def list_users(request):
    """
    応答:
      200:
        説明:ユーザーのリスト。
        例:
          [{"username": "tom"}, {"username": "lucy"}]
    """
    Not実装エラーを上げる()


def create_user(request):
    """
    応答:
      200:
        説明:ユーザー。
        例:
          {"username": "tom"}
    """
    Not実装エラーを上げる()


def openapi_schema(request):
    return schemas. OpenAPIResponse(request=request)


ルート=[
    Route("/users",エンドポイント=list_users,メソッド=["GET"]),
    Route("/users",エンドポイント=create_user,メソッド=["POST"]),
    Route("/schema", endpoint=openapi_schema,include_in_schema=False)
]

app=Starlette(ルート=ルート)

/schemaエンドポイントでOpen APIモードにアクセスできるようになりました。

.get_schema(routes) を使用してAPIパターンを直接生成できます。

schema=schemas. get_schema(ルート=アプリのルート)
アサートスキーマ=={
    "openapi":"3.0.0",
    "info":{"title": "Example API", "version": "1.0"},
    パス:{
        "/users":{
            "get":{
                "応答":{
                    200: {
                        "description":"ユーザーのリスト",
                        "例":[{"username": "tom"},{"username": "lucy"}],
                    }
                }
            },
            "ポスト":{
                "応答":{
                    200:{"説明":"ユーザー","例":{"username": "tom"}}
                }
            },
        },
    },
}

また、APIドキュメントの生成などのツールを使用できるように、APIスキーマを印刷できるようにすることもできます。

if__name__=='__main__':
    assert sys. argv[-1]in("run","schema"),"使用法:example.py[run|schema]"

    if sys. argv[-1]=="run":
        uvicorn.run("example: app",host='0.0.0.0',port=8000)
    elif sys. argv[-1]=="schema":
        schema=schemas. get_schema(ルート=アプリのルート)
        print(yaml. dump(schema,default_flow_style=False))

サードパーティ製パッケージ

星小体-API仕様

Starletteは、いくつかのオブジェクトシリアライズライブラリをサポートするAPISpecを簡単に統合できます。