🧎

FastAPI入門してみた

2024/12/27に公開

きっかけ

普段は機械学習エンジニア(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です。

https://qiita.com/gcyata/items/342073fa7607fd4082bd

次に実際に 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}!" が返ってくるのを確認できる。


参考
https://zenn.dev/satonopan/articles/c4e6d55a64da0c#fn-3449-1

Discussion