FastAPI入門してみた
きっかけ
普段は機械学習エンジニア(AIエンジニア)をやっています。過去に機械学習系のAPIを作る機会もあったのですが、あまりライブラリに頼らずにオレオレお手製で作成してきてました。なので便利なライブラリはあまり意識してこなかったのですが、FastAPIが何やら便利そうなので入門してみようと思った次第です。
Tutorial
以下を見ながらやっていこうと思います
が、実環境を汚したくないので、Docker環境にて実行します。こちらを参考にしました。
フォルダ構成
sample_project
├── app
│ └── main.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
app/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
docker-compose.yaml
version: "3.0"
services:
api:
container_name: "api"
volumes:
- ./app:/app
build: .
ports:
- 8080:8080
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app/ .
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8080"]requirements.txt
起動する
$ docker compose up
対話的APIドキュメント¶
以下にアクセスすると自動生成された対話的APIのドキュメントが表示されてます。http://localhost:8080/docs
※
これはSwagger UIとなるもので
Swagger は RESTful APIを構築するためのオープンソースのフレームワークのことです。「Open API Initiative」という団体がRESTful APIのインターフェイスの記述をするための標準フォーマットを推進していて、その標準フォーマットがSwaggerです。
次に実際に API を叩いてみます。起動後に http://localhost:8080/ にアクセスすると、先ほどの root エンドポイントが動いているのが確認できるはずです。もちろん docker compose up した際のコンソールログでも、Uvicorn から「Application startup complete.」のメッセージが出ていれば起動成功の目印になります。
エンドポイントを追加してみる
たとえば以下のように、/hello/{name} というパスパラメータ付きのエンドポイントを追加してみます。
# app/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/hello/{name}")
async def hello_name(name: str):
return {"message": f"Hello {name}!"}
この状態で docker compose up し直すと、http://localhost:8080/docs の Swagger UI からも新しいエンドポイント /hello/{name} が見られる。
実際に「Try it out」ボタンから name に好きな文字列を入れて実行すれば、レスポンスで "Hello {name}!" が返ってくるのを確認できる。
参考
Discussion