1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FastAPIプロジェクトのはじめかた

Last updated at Posted at 2024-10-30

必要なモジュールをインストール

以下を実行

  • 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 に適当なリクエストを送って動作確認する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?