近年、APIの開発にはPythonが広く使われています。
その中でも、FastAPIはPythonの標準的なウェブフレームワークであるFlaskやDjangoに比べ、
より高速で効率的なAPI開発を可能にします。
この記事では、FastAPIを使ってRESTful APIを開発する方法を、サンプルコードを交えて解説します。
FastAPIの特徴
- Pythonの型ヒントを活用し、自動的にリクエストのバリデーションを行う
- 自動的にAPIドキュメントを生成(Swagger UI, ReDoc)
- 非同期処理に対応し、高いパフォーマンスを発揮
- OAuth2、JWTなどの認証方式をサポート
以上が、FastAPIの主な特徴です。
これらの特徴により、FastAPIは高速で効率的なAPI開発を可能にします。
開発環境の準備
まず、PythonとFastAPI、およびASGIサーバーであるuvicornをインストールします。
pip install fastapi uvicorn |
FastAPIは、ASGIサーバーの上で動作します。
ASGIは、非同期処理に対応したPythonのウェブサーバーインターフェースです。
uvicornは、FastAPIを実行するために推奨されているASGIサーバーの一つで、高速で軽量な特徴があります。
シンプルなAPIの作成
以下は、FastAPIを使った基本的なAPIの例です。
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: str = None ): return { "item_id" : item_id, "q" : q} |
このコードでは、以下の2つのエンドポイントを定義しています。
- ルートパス(”/”)
- アイテムIDを受け取るパス(”/items/{item_id}”)
APIサーバーの起動
APIサーバーを起動するには、以下のコマンドを実行します。
uvicorn main:app --reload |
ここで、mainは、FastAPIのインスタンスが定義されているPythonファイルの名前(この例ではmain.py)です。
–reloadオプションを指定すると、コードの変更を検知して自動的にサーバーが再起動します。

これで、http://127.0.0.1:8000/ でAPIサーバーにアクセスできます。
Chromeでアクセスすると、次のように表示されます。

また、http://127.0.0.1:8000/docs にアクセスすると、自動生成されたAPIドキュメント(Swagger UI)を確認できます。
Swagger UIは、これはこれでかなり便利です。

より複雑なAPIの開発
実際のAPIでは、データベースとの連携やリクエストボディの受け取りなど、より複雑な処理が必要になります。
以下は、Pydanticを使ってリクエストボディを定義し、APIでJSONデータを受け取る例です。
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str price: float is_offer: bool = None @app .post( "/items/" ) def create_item(item: Item): return { "item_name" : item.name, "price" : item.price, "is_offer" : item.is_offer} |
このコードでは、/items/ エンドポイントがPOSTリクエストを受け付けるように定義しています。
create_item 関数は、Item クラスのインスタンスをリクエストボディとして受け取り、JSONデータが自動的に解析・バリデーションされます。
cURLを使ってテストする際は、以下のコマンドを用います。
curl -X 'POST' \ 'http://127.0.0.1:8000/items/' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "name" : "string" , "price" : 0, "is_offer" : true }' |
実は、これはSwagger UIで確認できるコマンドになります。

なお、Windowsの場合だとPowerShellで確かめたいですよね。
その場合は、以下を実行します。
$headers = @{ 'accept' = 'application/json' 'Content-Type' = 'application/json' } $body = @{ 'name' = 'string' 'price' = 0 'is_offer' = $ true } | ConvertTo-Json Invoke-RestMethod -Uri 'http://127.0.0.1:8000/items/' -Method 'POST' -Headers $headers -Body $body |
実行した結果は、以下。

ちゃんとAPI側のログにもアクセスの形跡があります。

まとめ
FastAPIを使えば、Pythonでシンプルかつ高速なRESTful APIを開発できます。
uvicornは、FastAPIを実行するための高速で軽量なASGIサーバーです。
本記事で紹介した基本的な使い方をマスターすれば、より複雑なAPIの開発にも応用できるでしょう。
FastAPIの公式ドキュメントには、さらに多くの機能や使用例が紹介されているので、ぜひ参考にしてみてください。