サブアプリケーション - マウント¶
独自の OpenAPI と独自のドキュメント UI を持つ、2つの独立したFastAPIアプリケーションが必要な場合は、メインアプリケーションを作成し、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の詳細と、プロキシの背後のセクションでそれを明示的に使用する方法を学びます。