2.9 KiB
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 からそのまま提供されているものです。
///