はじめに
FAST APIは、Pythonの型ヒントに基づいたモダンで高速なAPI構築用Webフレームワークです。主な特徴は以下の通りです:
- 高速:Node.jsやGo並みに高パフォーマンス(StarletteとPydanticによる)。
- 開発が速い:開発速度が2〜3倍に。
- バグが少ない:人為的エラーを約40%削減。
- 直感的:エディタ補完が充実し、デバッグ時間も短縮。
- 簡単:学習コストが低く、ドキュメントを読む時間も短縮。
- 簡潔:コード重複が少なく、宣言から複数の機能を得られる。
- 堅牢:本番環境にすぐ使える。自動の対話型ドキュメント付き。
- 標準準拠:OpenAPIやJSON Schemaと完全互換。
ここで、Pythonの型ヒント(Type hint)とは、変数や関数の引数・戻り値に「どんな型を使うか」を明示するための記法です。
仮想環境の作成
cd myapp1
python -m venv .venv
source .venv/bin/activate
echo "*" > .venv/.gitignore
% which pip
/home/user/dev/myapp1/.venv/bin/pip
% which python
/home/user/dev/myapp1/.venv/bin/python
Typerのインストール(Fast APIのCLIs)
pip install "fastapi[standard]"
サンプル GET API
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
実行
% fastapi dev main.py
サンプル PUT API
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}