PythonとFastAPIで始めるRESTful API開発

PythonとFastAPIで始めるRESTful API開発 プログラミング

近年、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の公式ドキュメントには、さらに多くの機能や使用例が紹介されているので、ぜひ参考にしてみてください。

タイトルとURLをコピーしました