🛣️
FastAPI Routing on Vercel Serverless
前回の記事で、Vercel に FastAPI をデプロイしました。
すべての機能が単一のファイルに実装されていると、機能追加に伴ってソースコードの見通しが悪化します。そこで、FastAPI の APIRouter を活用し、ソースコードの可読性を確保します。
ディレクトリ構成
$ mkdir api/hello
$ touch api/hello/views.py
$ tree api/
api/
├── hello
│ └── views.py
└── server.py
API パスと同名のディレクトリを、api ディレクトリに追加して機能を集約します。
ソースコード
views.py
from fastapi import APIRouter
router = APIRouter()
@router.get("")
async def read_hello():
return {"msg": "Hello World"}
api/hello/views.py では、/hello api の機能を実装します。
server.py
from fastapi import FastAPI
from api.hello.views import router as hello_router
app = FastAPI()
app.include_router(hello_router, prefix="/hello", tags=["Hello"])
views.py で定義された router を app に include する際に prefix="/hello"
を指定することで、views.py の ルーティングパスには全て /hello
prefix が自動的に付与されます。
動作確認
vercel dev でローカル環境を起動して、curl で動作を確認してみます。
$ vercel dev
Vercel CLI 28.18.3
> Ready! Available at http://localhost:3000
$ curl -s http://localhost:3000/hello | jq .
{
"msg": "Hello World"
}
良さそうです
Discussion