FastAPIは、Pythonで高速かつ高性能なWeb APIを構築するためのモダンなフレームワークです。非同期プログラミングを活用し、高いパフォーマンスを実現しながら、簡潔でわかりやすいコードを書けることが特徴です。FastAPIの基本的な使い方と具体的な例を紹介します。
FastAPIの基本機能
- 高性能: FastAPIは、非同期処理により高性能なAPIを実現します。特に、複数の同時リクエストを効率的に処理できます。
- 簡潔なコード: Pythonの型ヒントを活用し、入力バリデーションや自動ドキュメント生成が簡単に行えます。
- 自動ドキュメント生成: Swagger UIやReDocによるAPIドキュメントが自動的に生成され、開発者にとって非常に便利です。
- 非同期処理: asyncioと組み合わせて、非同期処理をサポートしており、高速なI/O操作が可能です。
FastAPIのインストール
まず、FastAPIとASGIサーバーのuvicorn
をインストールします。
pip install fastapi uvicorn
例題1: 基本的なFastAPIアプリケーションの作成
最初に、基本的なFastAPIアプリケーションを作成し、簡単なエンドポイントを実装します。
アプリケーションの作成以下の内容をmain.py
として保存します。このアプリケーションは、ルートパスにアクセスすると「Hello, World!」を返します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
アプリケーションの実行uvicorn
を使ってアプリケーションを起動します。
uvicorn main:app --reload
--reload
オプションを使用すると、コードの変更があるたびに自動的にサーバーが再起動されます。
APIのアクセスブラウザでhttp://127.0.0.1:8000/
にアクセスすると、以下のようなJSONレスポンスが返されます。
{
"message": "Hello, World!"
}
例題2: パスパラメータとクエリパラメータの使用
次に、パスパラメータとクエリパラメータを使用して、動的なレスポンスを生成する方法を示します。
パスパラメータの使用パスパラメータを使用して、動的なURLに対応するエンドポイントを定義します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
このコードでは、/items/{item_id}
にアクセスすると、item_id
が動的にレスポンスに含まれます。たとえば、http://127.0.0.1:8000/items/42
にアクセスすると、以下のようなJSONレスポンスが返されます。
{
"item_id": 42
}
クエリパラメータの使用クエリパラメータを使用して、追加の情報をAPIに提供する方法を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_item(item_id: int, q: str = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
このコードでは、クエリパラメータq
が指定された場合、その値をレスポンスに含めます。たとえば、http://127.0.0.1:8000/items/?item_id=42&q=search_term
にアクセスすると、以下のようなJSONレスポンスが返されます。
{
"item_id": 42,
"q": "search_term"
}
例題3: POSTリクエストとデータのバリデーション
次に、POSTリクエストを受け取り、データのバリデーションを行う方法を示します。
Pydanticモデルの定義データバリデーションにPydanticモデルを使用します。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
POSTリクエストの送信http://127.0.0.1:8000/items/
に対して、JSON形式のデータをPOSTリクエストで送信します。たとえば、以下のデータを送信します。
{
"name": "Sample Item",
"description": "This is a sample item",
"price": 12.5,
"tax": 1.5
}
すると、送信したデータがそのままレスポンスとして返されます。
例題4: 非同期処理の実装
FastAPIは、非同期処理をサポートしており、I/Oバウンドな操作を効率的に処理できます。
非同期処理を行う関数の定義非同期にデータを取得し、それを返す関数を定義します。
import asyncio
from fastapi import FastAPI
app = FastAPI()
async def fetch_data():
await asyncio.sleep(2)
return {"data": "Fetched data"}
@app.get("/data/")
async def get_data():
data = await fetch_data()
return data
このコードでは、/data/
にアクセスすると、2秒間の待機の後にデータが返されます。非同期処理により、他のリクエストが待機せずに処理されるため、全体の効率が向上します。
結論
FastAPIは、Pythonで高速なWeb APIを構築するための非常に強力なフレームワークです。FastAPIの非同期処理機能や型ヒントを活用した自動ドキュメント生成は、開発効率とパフォーマンスを両立させるための重要な要素です。基本的なGETリクエストの実装から、POSTリクエストでのデータバリデーション、非同期処理の活用まで、FastAPIの理解と適用は、現代のWeb開発において非常に有用です。