FastAPIとクエリパラメータ
FastAPIは、Pythonの非常に高速な(高性能)、使いやすい、モダンな、高速(高性能)なWebフレームワークです。それは非常に直感的で簡単に使用でき、強力な機能を提供します。
クエリパラメータは、URLの一部であり、特定の情報を提供します。これらは、URLの末尾にある?
の後に配置され、&
で区切られます。例えば、https://example.com/items?id=5&color=red
では、id
とcolor
はクエリパラメータであり、それぞれ5
とred
という値を持っています。
FastAPIを使用すると、関数のパラメータとして直接クエリパラメータを宣言できます。FastAPIは、パラメータの型注釈を使用して、入力データのバリデーション、直列化、ドキュメンテーションを自動的に行います。
以下に、FastAPIを使用してクエリパラメータを取得する基本的な例を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
return {"query": q}
この例では、q
という名前のクエリパラメータを宣言しています。このパラメータはオプショナルで、デフォルト値はNone
です。ユーザーがこのパラメータを提供すると、その値はq
に割り当てられ、その値がレスポンスに含まれます。
FastAPIのクエリパラメータの機能は、APIの柔軟性と使いやすさを大幅に向上させます。次のセクションでは、クエリパラメータの型変換について詳しく説明します。
クエリパラメータの型変換
FastAPIは、クエリパラメータの型変換を自動的に行います。これは、Pythonの型ヒントを使用して実現されます。例えば、以下のコードでは、q
という名前のクエリパラメータをint
型として宣言しています。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: int = None):
return {"query": q}
この場合、ユーザーがq
パラメータに数値を提供すると、その値は整数に変換され、その整数値がレスポンスに含まれます。もしユーザーが数値でない値を提供した場合、FastAPIは自動的に適切なエラーメッセージとHTTPステータスコードを返します。
FastAPIは、以下のような様々な型のクエリパラメータをサポートしています:
int
float
bool
str
List[str]
List[int]
List[float]
List[bool]
これらの型を使用することで、APIの柔軟性と使いやすさが大幅に向上します。次のセクションでは、クエリパラメータのバリデーションについて詳しく説明します。
クエリパラメータのバリデーション
FastAPIは、クエリパラメータのバリデーションも自動的に行います。これは、Pythonの型ヒントとPydanticモデルを使用して実現されます。
例えば、以下のコードでは、q
という名前のクエリパラメータをint
型として宣言し、0
以上の値であることを要求しています。
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: int = Query(..., ge=0)):
return {"query": q}
この場合、ユーザーがq
パラメータに0
以上の数値を提供すると、その値は整数に変換され、その整数値がレスポンスに含まれます。もしユーザーが0
未満の値を提供した場合、または数値でない値を提供した場合、FastAPIは自動的に適切なエラーメッセージとHTTPステータスコードを返します。
FastAPIのバリデーション機能は、以下のような様々な制約をサポートしています:
ge
(greater than or equal):値が指定した値以上であることを要求します。gt
(greater than):値が指定した値より大きいことを要求します。le
(less than or equal):値が指定した値以下であることを要求します。lt
(less than):値が指定した値より小さいことを要求します。min_length
:文字列の長さが指定した値以上であることを要求します。max_length
:文字列の長さが指定した値以下であることを要求します。regex
:値が指定した正規表現に一致することを要求します。
これらのバリデーション機能を使用することで、APIの堅牢性と信頼性が大幅に向上します。次のセクションでは、オプショナルなクエリパラメータについて詳しく説明します。
オプショナルなクエリパラメータ
FastAPIでは、クエリパラメータをオプショナルにすることができます。これは、デフォルト値を設定することで実現されます。デフォルト値が設定されている場合、ユーザーはそのパラメータを提供することを選択できます。もしユーザーがパラメータを提供しなかった場合、デフォルト値が使用されます。
以下に、FastAPIを使用してオプショナルなクエリパラメータを宣言する基本的な例を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
return {"query": q}
この例では、q
という名前のクエリパラメータを宣言しています。このパラメータはオプショナルで、デフォルト値はNone
です。ユーザーがこのパラメータを提供すると、その値はq
に割り当てられ、その値がレスポンスに含まれます。もしユーザーがこのパラメータを提供しなかった場合、q
の値はNone
になります。
オプショナルなクエリパラメータを使用することで、APIの柔軟性と使いやすさが大幅に向上します。次のセクションでは、複数のパスパラメータとクエリパラメータについて詳しく説明します。
複数のパスパラメータとクエリパラメータ
FastAPIでは、複数のパスパラメータとクエリパラメータを同時に使用することができます。これにより、APIのエンドポイントはより柔軟で強力になります。
以下に、FastAPIを使用して複数のパスパラメータとクエリパラメータを宣言する基本的な例を示します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
この例では、item_id
という名前のパスパラメータと、q
という名前のクエリパラメータを宣言しています。パスパラメータはURLの一部であり、クエリパラメータはURLの末尾にある?
の後に配置されます。
ユーザーがこのエンドポイントを呼び出すと、item_id
の値はURLから取得され、q
の値はクエリパラメータから取得されます。これらの値はそれぞれレスポンスに含まれます。
複数のパスパラメータとクエリパラメータを使用することで、APIの柔軟性と使いやすさが大幅に向上します。次のセクションでは、必須のクエリパラメータについて詳しく説明します。
必須のクエリパラメータ
FastAPIでは、クエリパラメータを必須にすることができます。これは、デフォルト値を設定せずにパラメータを宣言することで実現されます。また、Query
クラスの...
(Ellipsis)を使用してパラメータが必須であることを明示的に示すこともできます。
以下に、FastAPIを使用して必須のクエリパラメータを宣言する基本的な例を示します。
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(...)):
return {"query": q}
この例では、q
という名前のクエリパラメータを宣言しています。このパラメータは必須で、ユーザーがこのパラメータを提供しないと、FastAPIは自動的に適切なエラーメッセージとHTTPステータスコードを返します。
必須のクエリパラメータを使用することで、APIの堅牢性と信頼性が大幅に向上します。これにより、APIは必要な情報が提供されていることを保証し、その情報に基づいて適切な処理を行うことができます。これは、APIの信頼性と堅牢性を確保するための重要な側面です。この記事では、これらの概念を詳しく説明し、具体的なコード例を提供しました。これにより、読者はFastAPIのクエリパラメータの強力な機能を理解し、自分のプロジェクトで利用することができます。この記事が役立つことを願っています。それでは、次回まで。さようなら!