You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.7 KiB

クエリパラメータモデル

もし関連する複数のクエリパラメータから成るグループがあるなら、それらを宣言するために、Pydanticモデルを作成できます。

こうすることで、複数の場所そのPydanticモデルを再利用でき、バリデーションやメタデータを、すべてのクエリパラメータに対して一度に宣言できます。😎

/// note | 備考

この機能は、FastAPIのバージョン 0.115.0 からサポートされています。🤓

///

クエリパラメータにPydanticモデルを使用する

必要な複数のクエリパラメータPydanticモデルで宣言し、さらに、それを Query として宣言しましょう:

{* ../../docs_src/query_param_models/tutorial001_an_py310.py hl[9:13,17] *}

FastAPIは、リクエストのクエリパラメータからそれぞれのフィールドのデータを抽出し、定義されたPydanticモデルを提供します。

ドキュメントの確認

対話的APIドキュメント /docs でクエリパラメータを確認できます:

余分なクエリパラメータを禁止する

特定の(あまり一般的ではないかもしれない)ケースで、受け付けるクエリパラメータを制限する必要があるかもしれません。

Pydanticのモデルの Configuration を利用して、 extra フィールドを forbid とすることができます。

{* ../../docs_src/query_param_models/tutorial002_an_py310.py hl[10] *}

もしクライアントがクエリパラメータとして余分なデータを送ろうとすると、エラーレスポンスが返されます。

例えば、クライアントがクエリパラメータ tool に、値 plumbus を設定して送ろうとすると:

https://example.com/items/?limit=10&tool=plumbus

クエリパラメータ tool が許可されていないことを通知するエラーレスポンスが返されます。

{
    "detail": [
        {
            "type": "extra_forbidden",
            "loc": ["query", "tool"],
            "msg": "Extra inputs are not permitted",
            "input": "plumbus"
        }
    ]
}

まとめ

FastAPIでは、クエリパラメータを宣言するために、Pydanticモデルを使用できます。😎

/// tip | 豆知識

ネタバレ注意: Pydanticモデルはクッキーやヘッダーの宣言にも使用できますが、その内容については後のチュートリアルで学びます。🤫

///