fastapi/docs/ja/docs/tutorial/header-param-models.md

3.2 KiB

ヘッダーパラメータのモデル

関連するヘッダーパラメータが一式ある場合、それらを宣言するためのPydantic モデルを作成できます。

これにより、モデルを複数箇所再利用でき、さらにすべてのパラメータに対するバリデーションやメタデータを一括で宣言できます。😎

/// note | 備考

これは FastAPI バージョン 0.115.0 以降でサポートされています。🤓

///

Pydantic モデルによるヘッダーパラメータ

必要なヘッダーパラメータPydantic モデル内で宣言し、関数引数ではそのパラメータを Header として宣言します:

{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}

FastAPI はリクエストのヘッダーから各フィールドの値を抽出し、定義した Pydantic モデルとして渡します。

ドキュメントの確認

/docs のドキュメント UI で必要なヘッダーを確認できます:

余分なヘッダーを禁止

特殊なユースケース(あまり一般的ではありません)では、受け付けるヘッダーを制限したい場合があります。

Pydantic のモデル設定で extra フィールドを forbid にして禁止できます:

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

クライアントが余分なヘッダーを送信しようとすると、エラーレスポンスが返されます。

例えば、クライアントが値 plumbustool ヘッダーを送ろうとすると、ヘッダーパラメータ tool は許可されていない旨のエラーレスポンスが返されます:

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

アンダースコア変換の無効化

通常のヘッダーパラメータと同様に、パラメータ名にアンダースコアがある場合は自動的にハイフンに変換されます。

例えば、コード上でヘッダーパラメータ save_data を定義すると、想定される HTTP ヘッダーは save-data となり、ドキュメント上にもそのように表示されます。

何らかの理由でこの自動変換を無効化する必要がある場合、ヘッダーパラメータ用の Pydantic モデルでも無効化できます。

{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}

/// warning | 注意

convert_underscoresFalse に設定する前に、アンダースコアを含むヘッダーの使用を禁止している HTTP プロキシやサーバーがあることに留意してください。

///

まとめ

Pydantic モデルを使って FastAPIヘッダーを宣言できます。😎