コンテンツにスキップ

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

それぞれ独立した 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 は root_path と呼ばれる ASGI 仕様のメカニズムを使用して、サブアプリケーションのマウント パスを伝達します。

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

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

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