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」より、簡易的にデータを渡してテストができる
コメント