FastAPIにおけるクエリパラメータ
FastAPIは、Pythonの非常に高速な(高性能)、使いやすい、モダンな、高速(高性能)のWebフレームワークです。それは非常に直感的で簡単に使うことができ、強力な機能を持っています。
クエリパラメータは、URLの一部として送信される追加の情報です。これらは、?
記号の後にキーと値のペアとして追加されます。例えば、http://example.com/items?id=5
のURLでは、id=5
がクエリパラメータです。
FastAPIでは、関数のパラメータとしてクエリパラメータを定義することができます。これにより、クエリパラメータの存在とその値を簡単にチェックすることができます。
以下に、FastAPIを使用してクエリパラメータを定義する基本的な例を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
return {"q": q}
この例では、q
という名前のクエリパラメータを定義しています。このパラメータはオプションで、デフォルト値はNone
です。ユーザーがこのパラメータを提供すると、その値はq
に設定されます。ユーザーがパラメータを提供しない場合、q
の値はNone
になります。
このように、FastAPIを使用すると、クエリパラメータの取り扱いが非常に簡単になります。また、型注釈を使用することで、パラメータの型をチェックし、適切なエラーメッセージを自動的に生成することも可能です。これにより、APIの堅牢性とメンテナンス性が向上します。
クエリパラメータのバリデーション
FastAPIでは、クエリパラメータのバリデーションも非常に簡単に行うことができます。これは、Pythonの型ヒントとPydanticモデルを使用して実現されます。
例えば、以下のようにクエリパラメータの型を指定することで、そのパラメータが指定した型に適合しているかどうかを自動的にチェックすることができます。
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = None, price: float = 0.0):
return {"q": q, "price": price}
この例では、price
という名前のクエリパラメータを定義しています。このパラメータはfloat
型であることが期待されています。ユーザーがこのパラメータを提供し、その値が浮動小数点数でない場合、FastAPIは適切なエラーメッセージを自動的に生成します。
また、Pydanticモデルを使用することで、より複雑なバリデーションを行うことも可能です。例えば、以下のようにPydanticモデルを定義し、そのモデルを関数のパラメータとして使用することで、クエリパラメータのバリデーションを行うことができます。
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import Optional
class Item(BaseModel):
name: str = Field(..., min_length=1, max_length=50)
description: Optional[str] = Field(None, max_length=100)
price: float = Field(..., gt=0)
app = FastAPI()
@app.get("/items/")
async def read_items(item: Item):
return {"item": item}
この例では、Item
という名前のPydanticモデルを定義しています。このモデルはname
、description
、price
という3つのフィールドを持っています。各フィールドにはバリデーションルールが設定されており、これらのルールに違反するとFastAPIは適切なエラーメッセージを自動的に生成します。
このように、FastAPIとPydanticを使用することで、クエリパラメータのバリデーションを簡単かつ効率的に行うことができます。これにより、APIの堅牢性とメンテナンス性が向上します。
正規表現を用いたクエリパラメータの検証
FastAPIとPydanticを使用すると、正規表現を用いたクエリパラメータの検証も可能になります。これは、PydanticのField
関数とPythonのre
モジュールを使用して実現されます。
例えば、以下のようにField
関数のregex
引数に正規表現を指定することで、そのパラメータが指定した正規表現に適合しているかどうかを自動的にチェックすることができます。
from fastapi import FastAPI
from pydantic import BaseModel, Field
import re
class Item(BaseModel):
name: str = Field(..., regex="^[a-zA-Z0-9]+$")
app = FastAPI()
@app.get("/items/")
async def read_items(item: Item):
return {"item": item}
この例では、Item
という名前のPydanticモデルを定義しています。このモデルはname
というフィールドを持っており、そのフィールドは^[a-zA-Z0-9]+$
という正規表現に適合する文字列であることが期待されています。ユーザーがこのフィールドに適合しない値を提供すると、FastAPIは適切なエラーメッセージを自動的に生成します。
このように、FastAPIとPydanticを使用することで、正規表現を用いたクエリパラメータの検証を簡単かつ効率的に行うことができます。これにより、APIの堅牢性とメンテナンス性が向上します。