ファイルを分割してルートを定義する【FastAPI】

FastAPI

今回はFastAPIでルート定義を行う際に、ファイル分割して定義する方法を紹介します。

入門等でよく見る方法では、下記のコードのようにルートを定義しています。

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
def index():
    return {'get': 'test'}

プロジェクトが大きくなりエンドポイントが増えてきた際に、単一ファイルに記述しているとファイルが煩雑になってしまいます。

そのためファイルを分割してルートを定義する必要があります。

ファイルを分割してルートを定義するには、下記の2つを利用します。

  • include_router:定義したルートを読み込む
  • APIRouter:ルートを定義する

ディレクトリ構造は下記を想定して、実際にコードを書いてみます。

.
├── main.py
└── routers
    ├── router1.py
    └── router2.py

router1.pyrouter2.pyの2つのファイルにルートを定義していきます。

ルートの定義方法は、この記事の初めに使った@app.get()と同じです。FastAPI()で生成されたオブジェクトで行うか、APIRouter()で生成されたオブジェクトで行うかが違います。

from fastapi import APIRouter

router = APIRouter()

@router.get('/route1')
def route1_get():
    return {"get": "route1"}

@router.post('/route1/{id}')
def route1_post(id):
    return {"path_param": id}
from fastapi import APIRouter

router = APIRouter()

@router.get('/route2')
def route2_get():
    return {"animal": "ahiru"}

定義したルートをinclude_router()で読み込みます。
include_router()FastAPI()で生成したオブジェクトのメソッドとして利用できます。

引数にはAPIRouter()で生成したオブジェクトを与えましょう。

from fastapi import FastAPI

app = FastAPI()

from routers import router1
from routers import router2

app.include_router(router1.router)
app.include_router(router2.router)

実際にパスにアクセスしてみても、しっかりと定義できていることがわかります!

コメント