LoginSignup
5
6

More than 3 years have passed since last update.

FastAPIを使ってとりあえず、swaggerにそれっぽいAPIの使い方を表示したい

Last updated at Posted at 2020-04-05

概要

とにかく、とりあえず、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が変える様な感じのものを書くイメージ。

こんな感じ。
スクリーンショット 2020-04-05 21.59.48.png

より具体的に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",
            }
        }
# 後略

以下のように表示される。
スクリーンショット 2020-04-05 22.08.35.png

最後に

fastapi公式チュートリアル はボリュームが多いけども、やっておくとためになるのよいです。

5
6
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
5
6