🤖

【AI_5日目】FastAPI_1冊目

2024/09/06に公開

こんにちは投資ロウトです。

背景

AI開発ができるためにwebAPIについて理解を深めていきます。
※Tailwind CSSとkeycloakは現場でピンチになれば再開します。

スキーマ

api/schemas/task.py

from pydantic import BaseModel, Field

class StockBase(BaseModel):
    # 共通するフィールドは親クラスに定義
    stock_name: str | None = Field(None, example="投資ロウト株式会社")

class StockCreate(StockBase):
    pass

class StockCreateResponse(StockCreate):
    id: int

    class Config:
        # orm_modeはDB操作の為に必要とのこと。
        orm_mode = True

class Stock(StockBase):
    id: int

    class Config:
        orm_mode = True

api/routers/stock.py

# レスポンスするものは、StockCreateResponseの方で返却されるように型定義
@router.post("/stocks", response_model=stock_schema.StockCreateResponse)
# StockCreateで株の名前を受け取り、StockCreateResponseでidを付与し、受け取った情報とともに返却する
async def create_stock(stock_body: stock_schema.StockCreate):
    return stock_schema.StockCreateResponse(id=1, **stock_body.dict())

APIを投げてみたいと思います。

きちんと返ってきました。

逆にjsonがNoneだと

デフォルト値がきちんと返ってきております。

またこの時点までの開発でAPIモックの役割を果たすとのことです。ただ過去の現場でこのままでは使いづらいので、以下のようなツールを使って開発などを行っておりました。

https://mockoon.com/

またFastAPIではSwagger UIをフロントエンドに引き渡せるので、スキーマ駆動開発が実現できるとのことでした。

MySQLコンテナの作成

docker-compose.yamlを用意する

その後にdocker compose upで起動。コンテナ内でMySQLとFastAPIが起動されているようです。

別ターミナルを起動し、MySQLにアクセスしてみます。

docker compose exec db mysql demo

以下のように表示されて動作されない。

no configuration file provided: not found

どうやらプロジェクトのルートで実行しないといけないよう。

# ルートディレクトリに移動
pushd ルートディレクトリ

再度同じコマンドを実行します。

# 以下のエラーが発生
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

パスワードを指定していないのが、原因だったので、指定する

docker compose exec db mysql -u root -p 接続したいデータベース名

Docker内のDBにアクセスできた

と短いですが、一旦以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ進めていきたいと思います。

Discussion