コンテンツへスキップ

サブアプリケーション - マウント

独自の独立した OpenAPI と独自のドキュメント UI を持つ、2つの独立した FastAPI アプリケーションが必要な場合は、メインアプリケーションを1つ持ち、1つ (または複数) のサブアプリケーションを「マウント」できます。

FastAPI アプリケーションのマウント

「マウント」とは、完全に「独立した」アプリケーションを特定のパスに追加することです。これにより、そのパスの下のすべての処理が、そのサブアプリケーションで宣言されたパス操作によって行われます。

トップレベルアプリケーション

まず、メインのトップレベル FastAPI アプリケーションとそのパス操作を作成します。

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

サブアプリケーション

次に、サブアプリケーションとそのパス操作を作成します。

このサブアプリケーションは、通常の FastAPI アプリケーションですが、これが「マウント」されるものになります。

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

サブアプリケーションのマウント

トップレベルアプリケーション app に、サブアプリケーション subapi をマウントします。

この場合、パス /subapi にマウントされます。

from fastapi import FastAPI

app = FastAPI()


@app.get("/app")
def read_main():
    return {"message": "Hello World from main app"}


subapi = FastAPI()


@subapi.get("/sub")
def read_sub():
    return {"message": "Hello World from sub API"}


app.mount("/subapi", subapi)

自動 API ドキュメントの確認

次に、ファイルで fastapi コマンドを実行します。

$ fastapi dev main.py

<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

そして、http://127.0.0.1:8000/docs でドキュメントを開きます。

メインアプリの自動 API ドキュメントが表示され、独自のパス操作のみが含まれます。

次に、サブアプリケーションのドキュメントを http://127.0.0.1:8000/subapi/docs で開きます。

サブアプリケーションの自動 API ドキュメントが表示され、独自のパス操作のみが含まれ、すべて正しいサブパスプレフィックス /subapi の下にあります。

どちらかのユーザーインターフェースを操作しようとすると、ブラウザが各特定のアプリまたはサブアプリと通信できるため、正しく機能します。

技術詳細: root_path

上記のようにサブアプリケーションをマウントすると、FastAPI は ASGI 仕様の root_path と呼ばれるメカニズムを使用して、サブアプリケーションのマウントパスを通信します。

これにより、サブアプリケーションはそのパスプレフィックスをドキュメント UI に使用することを認識します。

また、サブアプリケーションは独自のマウントされたサブアプリケーションを持つことができ、FastAPI がこれらの root_path をすべて自動的に処理するため、すべてが正しく機能します。

root_path と、それを明示的に使用する方法については、「プロキシの背後」のセクションで詳しく説明します。