概要
とにかく、とりあえず、FastAPIのswaggerの画面にAPIからのレスポンスの形を定義したり、
レスポンスのサンプルを表示したりしたい人向けの記事。
ぼくがそうだったのだけれども、そういう記事やblogが見つけられなくて、
ひとまず fastapi公式のチュートリアル を一通りこなしたのもあって、
同じ目的を持つ人の一助けになればと思って書いた。
前提
- こういう形のデータがレスポンスとして返ってくるとする。
{
"Special_choco1": {
"Milk": "many",
"Quantity": 5,
"Cacao": "a little"
},
"Store":[
{
"Tokyo": "sibuya",
"Hokkaido": "sapporo",
"Osaka": "nanba"
}
]
}
-
FastAPIのバージョンは 0.52.0
-
main.pyに書く
app=FastAPI() って書くファイルに書く。 -
きっと他にもっと良い書き方がある。
まずはレスポンスの形を定義する
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
class choco_model(BaseModel):
Milk: str
Quantity: int
Cacao: str
class Store_model(BaseModel):
Tokyo: str
Hokkaido: str
Osaka: str
class Special_choco(BaseModel):
Special_choco1: choco_model
Store: List[Store_model]
app = FastAPI()
@app.get("/api/v1/chocolate/{name}")
async def making_choco(name: str):
return # 後略。前提に記載したJSONが変える様な感じのものを書くイメージ。
Example Valueに定義したモデルを表示させる
デコレータのところのresponse_modelに定義したいモデルを指定する。
そうすると、swaggerのExample Value のところに表示されるようになる。
# 前略)
app = FastAPI()
@app.get("/api/v1/chocolate/{name}", response_model=Special_choco)
async def making_choco(name: str):
return # 後略。前提に記載したJSONが変える様な感じのものを書くイメージ。
より具体的にExample Valueを表示する。
型やデータの構造だけではなく、具体的にどんな値が返ってくるのかを表示するには、
定義の部分に表示したいデータを以下のように、class Config 内に記載する。
そうすると、具体的な値がexample value の欄に入った状態で表示される。
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
class choco_model(BaseModel):
Milk: str
Quantity: int
Cacao: str
class Config:
schema_extra = {
"example": {
"Milk": "very lot",
"Quantity": 10,
"Cacao": "many",
}
}
class Store_model(BaseModel):
Tokyo: str
Hokkaido: str
Osaka: str
class Config:
schema_extra = {
"example": {
"Tokyo": "shibuya",
"Hokkaido": "sapporo",
"Osaka": "nishinari",
}
}
# 後略
最後に
fastapi公式チュートリアル はボリュームが多いけども、やっておくとためになるのよいです。