必要なモジュールをインストール
以下を実行
-
pipenv install pydantic-settings
-
pipenv install fastapi[all]
Pythonプロジェクトを作ったら
pydantic-settings
は即インストールで良い
ディレクトリを構成
以下の構成を最初に作ってしまうことを推奨
+ [project-root]
+-- src
+-- api
+-- .gitkeep
+-- controller
+-- .gitkeep
+-- models
+-- .gitkeep
+-- main.py
+-- settings.py
+-- tests
+-- conftest.py
+-- Pipfile
環境変数読み込み実装
src/settings.py
を編集
backendを構築する上でDBアクセスなど高確率で何らかの外部変数が必要になる
環境変数や.envファイルによる指定を想定
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
FOO: str # プログラムで扱う環境変数を定義
BAR: int
settings = Settings()
サンプルAPI実装
src/api/foo.py
を作成
スキーマとリクエスト/レスポンス処理を記載
処理は Controller
に委譲することでFastAPIからの移植性を確保
以降は Controller
以下の作り込みになる
Controller
はDBへのコネクションやロードしたLLMなどを保持する想定
from fastapi import APIRouter
from pydantic import BaseModel
from controller.foo import FooController
foo_router = APIRouter()
controller = FooController()
class FooGetRequest(BaseModel):
pass
class FooGetResponse(BaseModel):
data: str
@foo_router.get('/foo')
async def health(request_body: FooGetRequest):
result = controller.get( ...)
return FooGetResponse(result ...)
class FooPostRequest(BaseModel):
data: str
class FooPostResponse(BaseModel):
id: int
@foo_router.post('/foo/post')
async def health(request_body: FooPostRequest):
result = controller.post(request_body ...)
return FooPostResponse(result ...)
エントリポイント実装
src/main.py
を編集
import用の sys.path
をここで設定しておく
import os
import sys
from fastapi import FastAPI
sys.path.append(os.path.dirname(__file__))
from api.foo import foo_router
from api.bar import bar_router
app = FastAPI()
app.include_router(foo_router)
app.include_router(bar_router)
サーバ起動
以下のコマンドにより uvicorn
を起動
-
uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload
localhost:8000
に適当なリクエストを送って動作確認する