🛣️

FastAPI Routing on Vercel Serverless

2023/04/08に公開

前回の記事で、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"
}

良さそうです

GitHubで編集を提案

Discussion