概要
Python の Webフレームワークである FastAPI を試してみました
環境
- macOS 11.6.8
- Python 3.10.2
- FastAPI 0.83.0
インストール
-
pipenv install 'fastapi[all]'
とりあえず動かすコード
- vim app.py
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 件のコメント:
コメントを投稿