FastAPIでミドルウェアを作成し使用する方法

概要

FastAPIは、ミドルウェア(middleware)を使用して、リクエストとレスポンスの間で処理を実行する能力を持つフレームワークです。ミドルウェアは、リクエストオブジェクト、レスポンスオブジェクト、および次のミドルウェア関数へのアクセスを提供します。ミドルウェアは、FastAPIのルートハンドラ内で使用されます。

ここでは、以下のバージョンを使用して、FastAPIでミドルウェアを作成する方法を紹介します。

FastAPI v0.100.0
Python v3.11.4
uvicorn v0.22.0

また、今回作成するコードは全て、GitHubに掲載しています。

ミドルウェアを使用する方法

FastAPIでは、ミドルウェアを使用するために、app.middlewareデコレータを使用します。

from fastapi import FastAPI

app = FastAPI()

@app.middleware("http")
async def my_middleware(request, call_next):
    print('This is an application-level middleware')
    response = await call_next(request)
    return response

上記のコードでは、my_middlewareという名前のアプリケーションレベルミドルウェアが作成されています。このミドルウェアは、すべてのリクエストに対して実行されます。call_next関数を使用すると、リクエストが次のミドルウェアまたはルートハンドラに渡されます。

ミドルウェアを作成する方法

以下の例では、my_middlewareという名前のミドルウェアを作成します。

main.py

from fastapi import FastAPI

app = FastAPI()

@app.middleware("http")
async def my_middleware(request, call_next):
    print('ミドルウェアの実行')
    response = await call_next(request)
    return response

@app.get('/')
async def root():
    return {"message": "Hello, World!"}

解説

  • FastAPIのインスタンスを作成
from fastapi import FastAPI
app = FastAPI()

FastAPIモジュールをインポートし、そのインスタンスを作成します。

  • ミドルウェア関数の定義
@app.middleware("http")
async def my_middleware(request, call_next):
    print('ミドルウェアの実行')
    response = await call_next(request)
    return response

my_middlewareという名前のミドルウェア関数を定義します。この関数は、リクエストオブジェクトを引数に取り、次のミドルウェアまたはルートハンドラーに処理を渡すためのcall_next関数を呼び出します。

  • ルートハンドラの定義
@app.get('/')
async def root():
    return {"message": "Hello, World!"}

/というパスへのGETリクエストをハンドリングするルートハンドラーを定義します。リクエストが来ると、{ message: 'Hello, World!' }というオブジェクトをレスポンスとして返します。

テスト

以下のコマンドをターミナルから実行します。

uvicorn main:app --reload

その後、以下のコマンドでテストします。

curl -X GET http://localhost:8000

まとめ

この記事では、FastAPIフレームワークを使用してミドルウェアを作成する方法について説明されています。FastAPIはリクエストとレスポンスの間で処理を行う能力を有するフレームワークで、ミドルウェアはこの処理における中心的な役割を果たします。FastAPIでは、app.middlewareデコレータを使用してミドルウェアを定義します。

記事では、アプリケーションレベルのミドルウェア my_middleware を作成する例を提供しています。このミドルウェアは、すべてのリクエストに対して実行され、リクエストが次のミドルウェアまたはルートハンドラに渡されます。作成したミドルウェアをテストするために、uvicornサーバーを起動して、curlコマンドでリクエストを送信する方法も紹介しています。

FastAPIの柔軟なルーティング機能と組み合わせることで、ミドルウェアはWebアプリケーションの開発における重要なツールとなります。