今回は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.py
とrouter2.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)
実際にパスにアクセスしてみても、しっかりと定義できていることがわかります!


コメント