(初学者)FastAPI:リクエストボディ(postメソッド)

FastAPIを学習中。惜しげもなく汚いコメント付きで色々メモを残していく。

とりあえずリクエストボディのところで学んだ内容をメモ。

from typing import Optional  # オプションパラメータ(必須でないパラメータに使用)
from fastapi import FastAPI
from pydantic import BaseModel  # データ型のバリデーションを行ってくれるやつ

# classでデータの構造定義 = モデルを定義するという。
# 最近だとclassで定義したデータ構造がDB格納用の形式に変換される機能もあるよね。
# そういうところもすんごい発展を感じる。SQL-ORM(オブジェクトリレーショナルマッパー)というやつか?

# バリデーションしてほしいからBaseModelを継承
# オプションパラメータにはOptional[]をつける
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: int
    tax: Optional[float] = None

# 次のようなデータが入ってくるとOK
# {
#   "name": "White T-shirt",
#   "description": "This is a White T-shirt",
#   "price": 5980,
#   "tax": 1.1
# }

# FastAPIのおまじない
app = FastAPI()

# 上のItemクラスで定義したデータ構造(型ヒントでアノテーションした形)でitem引数を指定することができる
@app.post("/item/")  # これはpathパラメータ(APIエンドポイント=URL) 
async def create_item(item: Item):  #  Itemでアノテしたitemを渡す
    # return item
    return {"message": f"{item.name}は、税込み価格{int(item.price*item.tax)}円です"}

# 解釈まとめ
# ・このAPIは、postで渡されるデータがItemクラスで定義されているデータ構造をしていないと受け付けませんよ
# ・Itemクラス内ではオプションパラメータや必須パラメータ、データタイプが設定されている

# 基本過ぎるその他メモ
# uvicorn main_post:app --reload でuvicorn起動して検証
# http://127.0.0.1:8000/docs から 「Try it out」より、簡易的にデータを渡してテストができる

コメント

タイトルとURLをコピーしました