FastAPIとは
FastAPIは、Pythonで書かれた現代的で高速(高性能)なWebフレームワークです。FastAPIは、Python 3.6以降の型ヒントを基に設計されており、これによりエディタの補完、型チェック、自動ドキュメント生成などの機能が強化されています。
FastAPIは、Starlette(ASGIフレームワーク)とPydantic(データバリデーション)を基に作られています。これにより、FastAPIは非常に高速なパフォーマンスを持ちつつ、直感的で使いやすいAPIを提供します。
FastAPIの主な特徴は以下の通りです:
- 高速: NodeJSやGoと同等のパフォーマンスを持ちます。
- 高生産性: 2倍以上の開発速度を実現します。開発者のエラーを減らし、直感的なAPIを提供します。
- 簡単: 設計が簡単で、使いやすいです。ドキュメンテーションが充実しています。
- 短い: コード量が少なく、バグを減らし、メンテナンスを容易にします。
- 堅牢: プロダクションでの使用に耐えうる堅牢なコードを書くのを助けます。
- スタンダード: APIにOpenAPI(以前はSwaggerとして知られていました)とJSON Schemaのスタンダードを採用しています。
- JSON: JSONリクエストとレスポンスを自動的に読み書きします。
- 型チェック: 型ヒントと自動データバリデーションを使用します。
これらの特徴により、FastAPIはPythonでのWeb開発を効率的で楽しいものにします。
クエリパラメータの基本
Web APIでは、クエリパラメータはURLの一部として送信され、特定のリソースをフィルタリングしたり、リクエストの動作をカスタマイズしたりするために使用されます。クエリパラメータはURLの?
の後に配置され、&
で区切られます。
FastAPIでは、関数の引数としてクエリパラメータを定義することができます。これにより、クエリパラメータの値は自動的にその引数にマッピングされます。
以下に、FastAPIでクエリパラメータを定義する基本的な例を示します:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
if q:
return {"item": "Item", "q": q}
return {"item": "Item"}
この例では、q
という名前のクエリパラメータを定義しています。このパラメータはオプショナルで、デフォルト値はNone
です。ユーザーがこのパラメータを指定してリクエストを送信すると、その値は関数のq
引数にマッピングされます。
FastAPIでは、クエリパラメータの型を指定することも可能です。これにより、FastAPIは入力値のバリデーション、シリアライゼーション、ドキュメンテーションを自動的に行います。
以上が、FastAPIにおけるクエリパラメータの基本的な使い方となります。次のセクションでは、クエリパラメータをさらに強力にするためのNone
とAnnotated
の使用方法について詳しく説明します。
Noneを用いたクエリパラメータのオプション化
FastAPIでは、クエリパラメータをオプション化するためにNone
を使用することができます。これは、クエリパラメータが必須でない場合、つまりユーザーがそのパラメータを指定しなくてもリクエストが有効であるべき場合に使用されます。
以下に、FastAPIでNone
を使用してクエリパラメータをオプション化する例を示します:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
if q:
return {"item": "Item", "q": q}
return {"item": "Item"}
この例では、q
という名前のクエリパラメータを定義しています。このパラメータはオプショナルで、デフォルト値はNone
です。ユーザーがこのパラメータを指定してリクエストを送信すると、その値は関数のq
引数にマッピングされます。ユーザーがパラメータを指定しない場合、q
の値はデフォルトのNone
となります。
このように、FastAPIではNone
を使用してクエリパラメータをオプション化することができます。これにより、APIはより柔軟性を持ち、ユーザーは必要に応じてパラメータを指定することができます。次のセクションでは、Annotated
を使用してクエリパラメータをさらに強力にする方法について説明します。
Annotatedの紹介
Pythonのtyping
モジュールには、Annotated
という非常に便利な型ヒントが含まれています。Annotated
は、型ヒントにメタデータを追加するためのもので、これにより型ヒントが持つ情報を大幅に拡張することが可能になります。
Annotated
の基本的な使用方法は以下の通りです:
from typing import Annotated
Annotated[型, メタデータ]
この例では、型
は任意の型ヒントを指定することができ、メタデータ
は任意の情報を指定することができます。メタデータ
は、型ヒントに関連する追加の情報を提供するために使用されます。
FastAPIでは、Annotated
を使用してクエリパラメータにメタデータを追加することができます。これにより、クエリパラメータの振る舞いをより詳細に制御したり、自動生成されるAPIドキュメンテーションに追加の情報を提供したりすることが可能になります。
次のセクションでは、FastAPIでAnnotated
を使用してクエリパラメータを拡張する具体的な方法について説明します。
Annotatedを用いたクエリパラメータの拡張
FastAPIでは、Annotated
を使用してクエリパラメータにメタデータを追加し、その振る舞いをカスタマイズすることができます。これにより、クエリパラメータのバリデーションやドキュメンテーションをより詳細に制御することが可能になります。
以下に、FastAPIでAnnotated
を使用してクエリパラメータを拡張する例を示します:
from typing import Annotated
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: Annotated[str, Query(None, description="検索クエリ", max_length=50)] = None):
if q:
return {"item": "Item", "q": q}
return {"item": "Item"}
この例では、q
という名前のクエリパラメータを定義しています。このパラメータはオプショナルで、デフォルト値はNone
です。しかし、Annotated
を使用して、このパラメータにQuery
オブジェクトをメタデータとして追加しています。Query
オブジェクトは、パラメータの説明や最大長など、パラメータの振る舞いを制御するための情報を持っています。
ユーザーがこのパラメータを指定してリクエストを送信すると、その値は関数のq
引数にマッピングされます。また、その値はQuery
オブジェクトによって指定されたルールに従ってバリデーションされます。ユーザーがパラメータを指定しない場合、q
の値はデフォルトのNone
となります。
このように、FastAPIではAnnotated
を使用してクエリパラメータを拡張し、その振る舞いをより詳細に制御することができます。これにより、APIはより柔軟性を持ち、ユーザーは必要に応じてパラメータを指定することができます。また、自動生成されるAPIドキュメンテーションは、Annotated
によって提供されるメタデータを反映するため、より詳細かつ有用な情報を提供します。
まとめ
この記事では、FastAPIのクエリパラメータの管理について、特にNone
とAnnotated
の使用方法に焦点を当てて説明しました。
まず、FastAPIとは何か、その特徴と利点について説明しました。次に、クエリパラメータの基本的な使い方と、None
を使用してクエリパラメータをオプション化する方法について説明しました。
その後、Annotated
の紹介と、それを使用してクエリパラメータを拡張する方法について詳しく説明しました。Annotated
を使用することで、クエリパラメータの振る舞いをより詳細に制御し、APIの柔軟性を向上させることができます。
FastAPIは、その高速性と生産性、そして強力な型ヒントとバリデーション機能により、PythonでのWeb開発を効率的で楽しいものにします。そして、None
とAnnotated
を活用することで、FastAPIの可能性はさらに広がります。
これらの知識を活用して、より強力で柔軟なAPIを開発してみてください。Happy coding!
0件のコメント