FastAPIとは
FastAPIは、Pythonの現代的で高速(高性能)なWebフレームワークです。これは、非常に直感的で簡単に使用でき、デフォルトで優れたパフォーマンスを発揮します。
FastAPIは、Python 3.6以降の型ヒントを使用して、APIのパラメータを定義します。これにより、エディタのサポート(補完、リファクタリング)、型チェック、自動ドキュメンテーションなどの利点が得られます。
FastAPIは、Starlette(Web部分)とPydantic(データ部分)に基づいています。これにより、FastAPIはStarletteの全機能(WebSocket、GraphQL、テンプレートなど)とPydanticの全機能(モデルのバリデーション、シリアライゼーションなど)を利用できます。
FastAPIは、開発者が必要とする機能を提供しながら、可能な限り最高のパフォーマンスを提供することを目指しています。これにより、FastAPIは、NodeJSやGoなどの他の高性能フレームワークと比較しても競争力のあるパフォーマンスを発揮します。
FastAPIのインストール
FastAPIはPythonのパッケージとして提供されており、pipを使用して簡単にインストールできます。以下に、FastAPIのインストール手順を示します。
まず、Pythonがインストールされていることを確認します。Python 3.6以降が必要です。
次に、以下のコマンドを実行してFastAPIをインストールします。
pip install fastapi
このコマンドはFastAPIをインストールしますが、FastAPIを完全に活用するためには、非同期サーバーが必要です。Uvicornは、FastAPIと一緒によく使用される非同期サーバーの一つです。以下のコマンドでUvicornもインストールします。
pip install uvicorn[standard]
これで、FastAPIとUvicornがインストールされ、FastAPIを使用してWebアプリケーションを開発する準備が整いました。次のステップでは、FastAPIを使用してHello Worldアプリケーションを作成します。
Hello Worldの実装
FastAPIを使用してHello Worldアプリケーションを作成する方法を以下に示します。
まず、新しいPythonファイル(例えばmain.py
)を作成します。そして、以下のコードをそのファイルに追加します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
このコードは、FastAPIアプリケーションを作成し、ルートURL(/
)に対するGETリクエストを定義します。リクエストが来たときには、{"Hello": "World"}
というレスポンスを返します。
次に、ターミナルで以下のコマンドを実行して、アプリケーションを起動します。
uvicorn main:app --reload
ここで、main
はPythonファイル(main.py
)の名前で、app
はFastAPIインスタンスを作成するコードが含まれている変数の名前です。--reload
フラグは、コードが変更されるたびにサーバーを自動的に再起動するためのものです。
これで、ブラウザでhttp://localhost:8000
にアクセスすると、{"Hello": "World"}
というレスポンスが表示されます。これがFastAPIを使用したHello Worldアプリケーションの作成方法です。次のステップでは、FastAPIでのルーティングについて説明します。
FastAPIでのルーティング
FastAPIでは、ルーティングは非常に直感的に行うことができます。ルーティングとは、特定のエンドポイント(URL)に対するリクエストを、適切なビュー関数(リクエストハンドラ)にマッピングすることを指します。
FastAPIでは、デコレータを使用してルーティングを定義します。以下に、基本的なルーティングの例を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
このコードでは、2つのルートが定義されています。1つ目はルートURL(/
)で、2つ目は/items/{item_id}
というパスパラメータを含むURLです。{item_id}
部分は動的で、URLの一部として送信される任意の値を受け取ることができます。
それぞれのルートは、特定のHTTPメソッド(この場合はGET)に対応しています。これらのメソッドは、デコレータ(@app.get
)を通じて指定されます。
それぞれのルートは、リクエストが来たときに呼び出される関数(read_root
とread_item
)を持っています。これらの関数は、リクエストハンドラまたはビュー関数と呼ばれます。
FastAPIでは、これらのビュー関数が直接レスポンスを返すことができます。このレスポンスは、FastAPIによって自動的にJSONに変換されます。
以上がFastAPIでの基本的なルーティングの方法です。次のステップでは、FastAPIでのレスポンスの作成方法について説明します。
FastAPIでのレスポンスの作成
FastAPIでは、ビュー関数(リクエストハンドラ)が直接レスポンスを返すことができます。これらのレスポンスは、FastAPIによって自動的にJSONに変換されます。以下に、基本的なレスポンスの作成方法を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
このコードでは、read_root
関数が{"Hello": "World"}
という辞書を直接返しています。FastAPIはこの辞書を自動的にJSONレスポンスに変換します。
また、FastAPIでは、Pydanticモデルを使用してレスポンスの形状を定義することもできます。これにより、APIのレスポンスの形状を明確にし、ドキュメンテーションと型チェックを自動化することができます。
以下に、Pydanticモデルを使用したレスポンスの例を示します。
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str
price: float
app = FastAPI()
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: int):
return Item(name="Foo", description="A very nice item", price=35.4)
このコードでは、Item
というPydanticモデルを定義し、read_item
関数のresponse_model
として指定しています。この関数がItem
インスタンスを返すと、FastAPIはそれを自動的にJSONに変換します。
以上がFastAPIでの基本的なレスポンスの作成方法です。次のステップでは、FastAPIでのテスト方法について説明します。
FastAPIでのテスト
FastAPIでは、テストは非常に簡単に行うことができます。FastAPIはStarletteに基づいているため、Starletteのテストクライアントを使用してテストを行うことができます。以下に、基本的なテストの作成方法を示します。
まず、テスト対象のFastAPIアプリケーションを作成します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
次に、TestClient
を使用してテストを作成します。
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
このコードでは、TestClient
を使用してFastAPIアプリケーションのインスタンスを作成し、そのインスタンスを使用してHTTPリクエストを送信します。そして、レスポンスのステータスコードとJSONボディを検証します。
以上がFastAPIでの基本的なテストの作成方法です。この方法を使用すれば、FastAPIアプリケーションの各部分を効率的にテストすることができます。次のステップでは、FastAPIでのより高度なテスト戦略について説明します。これには、データベースとのインタラクション、認証、依存性のオーバーライドなどが含まれます。これらのテスト戦略を理解することで、FastAPIアプリケーションの品質と信頼性をさらに向上させることができます。