fastapi/docs/ja/docs/advanced/using-request-directly.md

2.9 KiB
Raw Blame History

Request を直接使う

これまで、必要なリクエストの各部分を、その型とともに宣言してきました。

次の場所からデータを取得します:

  • パスのパラメータ
  • ヘッダー
  • クッキー
  • など

こうすることで、FastAPI はそのデータを検証し、変換し、API のドキュメントを自動生成します。

しかし、Request オブジェクトに直接アクセスする必要がある場面もあります。

Request オブジェクトの詳細

FastAPI は内部的には Starlette の上にいくつかのツール層を載せたものなので、必要に応じて Starlette の Request オブジェクトを直接使えます。

また、Request オブジェクトから直接データ(例: ボディ)を取得する場合、そのデータは FastAPI によって検証・変換・ドキュメント化OpenAPI による自動 API ユーザーインターフェース向け)されません。

ただし、通常どおりに宣言された他のパラメータ(例: Pydantic モデルのボディ)は引き続き検証・変換・注釈付けなどが行われます。

それでも、Request オブジェクトを取得するのが有用な特定のケースがあります。

Request オブジェクトを直接使う

たとえば、path operation 関数内でクライアントの IP アドレス/ホストを取得したいとします。

そのためには、リクエストに直接アクセスする必要があります。

{* ../../docs_src/using_request_directly/tutorial001_py310.py hl[1,7:8] *}

path operation 関数の引数として Request 型のパラメータを宣言すると、FastAPI はその引数に Request を渡します。

/// tip | 豆知識

この例では、Request 型の引数に加えて、パスパラメータも宣言しています。

そのため、パスパラメータは取り出され、検証され、指定した型に変換され、OpenAPI で注釈(ドキュメント化)されます。

同様に、通常どおり任意の他のパラメータを宣言しつつ、追加で Request も受け取れます。

///

Request のドキュメント

より詳しくは、公式 Starlette ドキュメントサイトの Request オブジェクトを参照してください。

/// note | 技術詳細

from starlette.requests import Request を使うこともできます。

FastAPI は開発者である皆さんの便宜のために直接提供していますが、これは Starlette からそのまま提供されているものです。

///