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

57 lines
2.9 KiB
Markdown

# Request を直接使う { #using-the-request-directly }
これまで、必要なリクエストの各部分を、その型とともに宣言してきました。
次の場所からデータを取得します:
- パスのパラメータ
- ヘッダー
- クッキー
- など
こうすることで、**FastAPI** はそのデータを検証し、変換し、API のドキュメントを自動生成します。
しかし、`Request` オブジェクトに直接アクセスする必要がある場面もあります。
## `Request` オブジェクトの詳細 { #details-about-the-request-object }
**FastAPI** は内部的には **Starlette** の上にいくつかのツール層を載せたものなので、必要に応じて Starlette の <a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">`Request`</a> オブジェクトを直接使えます。
また、`Request` オブジェクトから直接データ(例: ボディ)を取得する場合、そのデータは FastAPI によって検証・変換・ドキュメント化(OpenAPI による自動 API ユーザーインターフェース向け)されません。
ただし、通常どおりに宣言された他のパラメータ(例: Pydantic モデルのボディ)は引き続き検証・変換・注釈付けなどが行われます。
それでも、`Request` オブジェクトを取得するのが有用な特定のケースがあります。
## `Request` オブジェクトを直接使う { #use-the-request-object-directly }
たとえば、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` のドキュメント { #request-documentation }
より詳しくは、<a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">公式 Starlette ドキュメントサイトの `Request` オブジェクト</a>を参照してください。
/// note | 技術詳細
`from starlette.requests import Request` を使うこともできます。
**FastAPI** は開発者である皆さんの便宜のために直接提供していますが、これは Starlette からそのまま提供されているものです。
///