FastAPIとPydanticの概要
FastAPIは、Pythonの非常に高速な(高性能)、使いやすい、モダンな、高速(高性能)なWebフレームワークです。FastAPIは、Python 3.6以降の型ヒントを使用してAPIを構築するためのフレームワークで、これによりデータのバリデーション、シリアライゼーション、ドキュメンテーション作成が自動化されます。
Pydanticは、Pythonのデータパーサとバリデータであり、Pythonの型ヒントを使用してデータのバリデーション、シリアライゼーション(JSONへの変換)、デシリアライゼーション(JSONからの変換)を行います。FastAPIは、Pydanticを使用してリクエストボディのデータを自動的にバリデートし、シリアライズします。
- FastAPIとPydanticを組み合わせることで、APIの開発が効率化され、コードの品質とメンテナンス性が向上します。次のセクションでは、これらのツールを使用してモデルスキーマを定義し、型チェックとバリデーションを行う方法について詳しく説明します。
モデルスキーマの定義と型チェック
FastAPIとPydanticを使用して、APIのリクエストとレスポンスのモデルスキーマを定義します。これにより、データの型チェックとバリデーションが自動的に行われます。
以下に、Pydanticを使用してモデルスキーマを定義する基本的な例を示します。
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
この例では、Item
という名前のモデルを定義しています。このモデルは、name
(必須)、description
(オプション)、price
(必須)、tax
(オプション)という4つのフィールドを持っています。
FastAPIは、このモデルスキーマを使用して、リクエストボディのデータを自動的にバリデートし、適切な型に変換します。また、このモデルはAPIのドキュメンテーションにも使用されます。
- 次のセクションでは、これらのモデルスキーマを使用してバリデーションを行う方法について詳しく説明します。
バリデーションの基本
FastAPIとPydanticを使用すると、データのバリデーションが非常に簡単になります。Pydanticのモデルスキーマを使用して、リクエストボディのデータの型と構造を定義します。そして、FastAPIは、このモデルスキーマを使用して、リクエストボディのデータを自動的にバリデートします。
以下に、FastAPIとPydanticを使用したバリデーションの基本的な例を示します。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
この例では、Item
という名前のPydanticモデルを定義し、そのモデルを使用してcreate_item
エンドポイントのリクエストボディをバリデートしています。リクエストボディのデータがItem
モデルのスキーマに一致しない場合、FastAPIは自動的にHTTP 422 Unprocessable Entityエラーを返します。
- このように、FastAPIとPydanticを使用すると、データのバリデーションが自動化され、APIの開発が効率化されます。
文字列とリストの長さによるバリデーション
FastAPIとPydanticを使用すると、文字列やリストの長さに基づくバリデーションも簡単に行うことができます。Pydanticのモデルスキーマでは、Field
関数を使用してフィールドの詳細なバリデーションルールを定義することができます。
以下に、文字列とリストの長さに基づくバリデーションの例を示します。
from typing import List
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str = Field(..., min_length=1, max_length=50)
description: str = Field(None, min_length=0, max_length=100)
tags: List[str] = Field([], min_items=0, max_items=10)
この例では、name
フィールドの長さは1文字以上50文字以下、description
フィールドの長さは0文字以上100文字以下であることを要求しています。また、tags
フィールドはリストであり、その要素数は0以上10以下であることを要求しています。
- これらのバリデーションルールは、リクエストボディのデータがPydanticモデルのスキーマに一致しない場合、FastAPIが自動的にHTTP 422エラーを返すことを保証します。
正規表現によるバリデーション
FastAPIとPydanticを使用すると、正規表現を用いたバリデーションも簡単に行うことができます。Pydanticのモデルスキーマでは、Field
関数を使用してフィールドの詳細なバリデーションルールを定義することができます。
以下に、正規表現によるバリデーションの例を示します。
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str = Field(..., regex="^[a-zA-Z0-9]+$")
この例では、name
フィールドは英数字のみを許可する正規表現を使用してバリデーションを行います。この正規表現は、name
フィールドが英数字のみで構成されていることを要求します。
- これらのバリデーションルールは、リクエストボディのデータがPydanticモデルのスキーマに一致しない場合、FastAPIが自動的にHTTP 422エラーを返すことを保証します。
数値の範囲によるバリデーション
FastAPIとPydanticを使用すると、数値の範囲に基づくバリデーションも簡単に行うことができます。Pydanticのモデルスキーマでは、Field
関数を使用してフィールドの詳細なバリデーションルールを定義することができます。
以下に、数値の範囲に基づくバリデーションの例を示します。
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str
price: float = Field(..., gt=0)
discount: float = Field(0, ge=0, le=1)
この例では、price
フィールドは0より大きい数値であることを要求しています(gt=0
)。また、discount
フィールドは0以上1以下の数値であることを要求しています(ge=0, le=1
)。
- これらのバリデーションルールは、リクエストボディのデータがPydanticモデルのスキーマに一致しない場合、FastAPIが自動的にHTTP 422エラーを返すことを保証します。
デフォルト値と必須チェック
FastAPIとPydanticを使用すると、デフォルト値の設定と必須チェックも簡単に行うことができます。Pydanticのモデルスキーマでは、フィールドのデフォルト値を設定し、フィールドが必須かどうかを指定することができます。
以下に、デフォルト値と必須チェックの例を示します。
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str = Field(..., example="Fantastic Item")
description: str = Field(None, example="This is a fantastic item.")
price: float = Field(..., gt=0, example=10.5)
tax: float = Field(0, ge=0, example=1.5)
この例では、name
とprice
フィールドは必須(...
)であり、description
とtax
フィールドはオプションで、それぞれデフォルト値がNone
と0
に設定されています。
- これらのバリデーションルールは、リクエストボディのデータがPydanticモデルのスキーマに一致しない場合、FastAPIが自動的にHTTP 422エラーを返すことを保証します。
0件のコメント