型チェックを超えて、FastAPIでは Query、Path、Field を使用してパス/クエリパラメータとモデルフィールドに制約を追加できます — 長さ、範囲、パターンなどのルールを強制し、違反時に自動的に422エラーとドキュメントが生成されます。
クエリとパス制約
fastapi Query, Path
():
...
():
...
Query() と Path() はクエリパラメータとパスパラメータに制約を追加します。一般的なもの:min_length/max_length(文字列)、ge/gt/le/lt(数値)、pattern(正規表現)。違反は自動的に明確な422エラーを生成します。
from pydantic import BaseModel, Field, EmailStr
class User(BaseModel):
name: str = Field(min_length=1, max_length=100)
age: int = Field(ge=0, le=120)
email: EmailStr # format validation via a type
bio: str = Field(default="", max_length=500, description="User bio")
同じ制約がリクエストボディを検証する Field() を介してモデルフィールドに適用されます。特殊な型(EmailStr、HttpUrl、UUID)はフォーマットを検証します。
q: str = Query(min_length=3, description="Search query", example="phone")
# the constraints + description + example appear in the auto-generated API docs
宣言した制約は OpenAPI ドキュメントにも反映されるため、ユーザーはルールを確認できます。
検証制約を追加することは、セキュリティ/堅牢性とAPIの適切な設計の両方にとって重要です — ルール(長さ制限、数値範囲、正規表現パターン、フォーマット型)を宣言することで、形式が正しくないまたは悪意のある入力がロジックに到達する前に、明確なエラーで拒否されることが保証されます。これは生入力を信頼してはいけないため必須です。
FastAPIはこれを宣言的かつ簡単にします:Query/Path/Field 制約は自動的に検証され(構造化された422エラーを生成)、同時にAPIドキュメントに文書化されるため、ルールは単一の宣言から強制され、かつ通信されます。
一般的な制約と特殊な検証型を知ることは、安全で明確に定義されたエンドポイントを構築するための日々の知識です — 基本的な型チェックを超えて、データが満たす必要がある実際のビジネスルールを強制する方法です。