2022年9月27日火曜日

FastAPI超入門

FastAPI超入門

概要

Python の Webフレームワークである FastAPI を試してみました

環境

  • macOS 11.6.8
  • Python 3.10.2
  • FastAPI 0.83.0

インストール

  • pipenv install 'fastapi[all]'

とりあえず動かすコード

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

実行

  • pipenv run uvicorn app:app --reload

uvicorn という Webサーバで起動します

動作確認

  • curl localhost:8000

で JSON が返ってきます

更に localhost:8000/docs にアクセスすると SwaggerUI が表示されます
localhost:8000/redoc にアクセスすると ReDoc 形式のドキュメントが表示されます

OpenAPI の json を取得する

localhost:8000/openapi.json にアクセスすると取得できます
保存したい場合は

  • wget 'localhost:8000/openapi.json'

で取得できます

POST を追加する

from pydantic import BaseModel
from pydantic import BaseSettings

from fastapi import FastAPI

app = FastAPI()


class Settings(BaseSettings):
    message: str = ""


settings = Settings()


class Item(BaseModel):
    message: str


@app.get("/")
async def get_msg():
    return {"message": settings.message}


@app.post("/")
def set_msg(item: Item):
    settings.message = item.message
    return {"message": item.message}

大きく変わっていますが POST を受けたい場合は @app.post デコレータを付与して定義します

動作確認として受け取ったデータが設定できているか確認したかったので BaseSettings という FastAPI 内で使える変数を定義しています

また POST の場合ボディとしてリクエストを受け取るには BaseModel というクラスを使います
これを引数として指定することでリクエストボディとして受け取ることができます

動作確認

curl -X 'POST' \         
  'http://localhost:8000/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "message": "hello"
}'
curl -XGET localhost:8000

で POST した message がセットされていることを確認しましょう

最後に

とりあえず GET, POST を試してみました
基本的には JSON API を作成するためのフレームワークになっていてドキュメントなども自動で生成してくれるようです

参考サイト

0 件のコメント:

コメントを投稿