FastAPIとは
FastAPIは、Pythonの非常に高速(高性能)、使いやすい、モダンな、高速(クイック)なWebフレームワークです。これは、Python 3.6以降の型ヒントに基づいています。
FastAPIの主な特徴は次のとおりです:
- 高速: NodeJSやGoと同等の非常に高いパフォーマンス(StarletteとPydanticのおかげです)。
- 高速な作成: 約2〜3倍の開発速度。開発者の時間を節約し、コードのバグを削減します。
- 少ないバグ: 開発者のエラーを減らす。直感的なシステムにより、バグが発生しにくくなります。
- 直感的: 素晴らしいエディタのサポート。自動補完がどこでも機能します。これにより、開発時間が大幅に短縮されます。
- 簡単: 高度に直感的で使いやすい設計。ドキュメンテーションを読む時間を大幅に短縮します。
- 短い: コードの重複を最小限に抑えます。各パラメータから複数の機能を取得します。少ないバグと短い開発時間。
- 堅牢: コードの準備が整っています。本番環境での使用を前提としています。
- 基準に準拠: 完全にOpenAPI(以前はSwagger)とJSON Schemaに準拠しています。
- JSONベース: JSONベースのリクエストとレスポンスを使用します。Pythonの型ヒントを使用して読みやすく、直感的で、簡単に使用できます。
- 自動ドキュメンテーション: 自動的に対話型APIドキュメンテーションと探索Webユーザーインターフェースが生成されます。
- モダンなPython: Python 3.6以降の型ヒント(新しいPythonバージョン)。No need to go back to Python 2.
FastAPIのリクエストボディの扱い
FastAPIでは、リクエストボディはPythonの型ヒントを使用して定義されます。これにより、データの検証、直列化、ドキュメンテーションが自動的に行われます。
以下に、FastAPIでリクエストボディを扱う基本的な例を示します。
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):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict
この例では、Item
という名前のPydanticモデルを作成しています。このモデルはリクエストボディの形状を定義します。name
とprice
は必須で、description
とtax
はオプションです。
create_item
関数では、このItem
モデルを引数として受け取ります。FastAPIは、送信されたリクエストボディをこのモデルに自動的にマッピングします。
また、FastAPIはこのモデルを使用して、リクエストボディのデータの検証と直列化を行います。さらに、このモデルはAPIのドキュメンテーションにも使用されます。これにより、APIの使用者は期待されるリクエストボディの形状を正確に理解することができます。
FastAPIでのリクエスト例の宣言
FastAPIでは、リクエストの形状を定義するためにPythonの型ヒントとPydanticモデルを使用します。これにより、リクエストの検証、直列化、ドキュメンテーションが自動的に行われます。
以下に、FastAPIでリクエストを宣言する基本的な例を示します。
from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, max_length=50)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
この例では、read_items
関数はq
という名前のクエリパラメータを受け取ります。このパラメータはオプショナルで、デフォルト値はNone
です。Query
関数を使用して、このパラメータの最大長を50文字に制限しています。
FastAPIは、送信されたリクエストのクエリパラメータをこの関数の引数に自動的にマッピングします。また、FastAPIはこの関数の引数を使用して、リクエストの検証と直列化を行います。さらに、この関数の引数はAPIのドキュメンテーションにも使用されます。これにより、APIの使用者は期待されるリクエストの形状を正確に理解することができます。
FastAPIでのリクエストの直接使用
FastAPIでは、リクエストオブジェクトを直接使用することも可能です。これにより、リクエストヘッダーやクッキーなど、リクエストに関連する詳細な情報にアクセスできます。
以下に、FastAPIでリクエストオブジェクトを直接使用する基本的な例を示します。
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/items/")
async def create_item(request: Request):
item_data = await request.json()
item_name = item_data.get("name")
item_price = item_data.get("price")
return {"item_name": item_name, "item_price": item_price}
この例では、create_item
関数はRequest
オブジェクトを引数として受け取ります。FastAPIは、送信されたリクエストをこのオブジェクトに自動的にマッピングします。
Request
オブジェクトを使用すると、リクエストボディを直接読み取ることができます。この例では、request.json()
メソッドを使用してリクエストボディをJSONとして読み取り、その結果をitem_data
に保存しています。
その後、item_data
から商品の名前と価格を取得し、それらをレスポンスとして返しています。
このように、FastAPIのRequest
オブジェクトを使用すると、リクエストに関連する詳細な情報にアクセスし、それを自由に操作することができます。これは、特定のユースケースに対して細かい制御が必要な場合に非常に便利です。ただし、通常はPydanticモデルを使用してリクエストデータを扱う方が簡単で効率的です。
FastAPIでのフォームデータの扱い
FastAPIでは、フォームデータを扱うための便利な機能が提供されています。これにより、HTMLフォームから送信されたデータを簡単に受け取ることができます。
以下に、FastAPIでフォームデータを扱う基本的な例を示します。
from fastapi import FastAPI, Form
from typing import Optional
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username, "password": password}
この例では、login
関数はusername
とpassword
という名前のフォームデータを受け取ります。Form
関数を使用して、これらのパラメータがフォームデータであることをFastAPIに伝えています。
FastAPIは、送信されたリクエストのフォームデータをこの関数の引数に自動的にマッピングします。また、FastAPIはこの関数の引数を使用して、リクエストの検証と直列化を行います。さらに、この関数の引数はAPIのドキュメンテーションにも使用されます。これにより、APIの使用者は期待されるリクエストの形状を正確に理解することができます。
このように、FastAPIのForm
関数を使用すると、HTMLフォームから送信されたデータを簡単に受け取ることができます。これは、ウェブアプリケーションのログインページなど、特定のユースケースに対して非常に便利です。ただし、通常はPydanticモデルを使用してリクエストデータを扱う方が簡単で効率的です。
まとめ
FastAPIは、Pythonの非常に高速(高性能)、使いやすい、モダンな、高速(クイック)なWebフレームワークです。Python 3.6以降の型ヒントに基づいています。
FastAPIを使用すると、リクエストボディの扱い、リクエストの宣言、リクエストの直接使用、フォームデータの扱いなど、Webアプリケーションの開発が非常に簡単になります。これらの機能は、APIの開発を迅速かつ効率的に行うための強力なツールです。
この記事では、これらの主要な機能について詳しく説明しました。これらの知識を活用することで、FastAPIを使用したWebアプリケーションの開発がより簡単になります。
FastAPIは、その高速性、直感性、堅牢性により、現代のWebアプリケーション開発における優れた選択肢です。これらの特性は、開発者が高品質なAPIを迅速に開発するのを助けます。その結果、開発者はより多くの時間を、アプリケーションの他の重要な側面に集中することができます。これは、FastAPIが現代のWeb開発における強力なツールである理由です。この記事が、FastAPIの理解と使用に役立つことを願っています。それでは、Happy Coding!