サブアプリケーション - マウント¶
独自の独立した 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
と、それを明示的に使用する方法については、「プロキシの背後」のセクションで詳しく説明します。