コンテンツへスキップ

リクエストを直接使用する

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

からのデータの取得

  • パスをパラメータとして。
  • ヘッダー。
  • クッキー。
  • など

これにより、FastAPI はデータを検証し、変換し、API のドキュメントを自動的に生成します。

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

Request オブジェクトの詳細

FastAPI は実際にはStarletteの上にいくつかのツールのレイヤーがあるため、必要な場合はStarletteのRequestオブジェクトを直接使用できます。

また、Request オブジェクトから直接データを取得する場合(例えば、ボディを読み取る場合)、FastAPIによって検証、変換、ドキュメント化(OpenAPIによる自動APIユーザーインターフェース用)は行われないことを意味します。

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

しかし、Request オブジェクトを取得することが有用な特定のケースがあります。

Request オブジェクトを直接使用する

パス操作関数内でクライアントのIPアドレス/ホストを取得したいと想像してみましょう。

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

from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

型がRequestであるパス操作関数パラメータを宣言することで、FastAPIはそのパラメータにRequestを渡すことを認識します。

ヒント

この場合、リクエストパラメータの横にパスパラメータを宣言していることに注意してください。

したがって、パスパラメータは抽出、検証され、指定された型に変換され、OpenAPIで注釈付けされます。

同様に、他のパラメータも通常通り宣言でき、さらにRequestも取得できます。

Request のドキュメント

Starletteの公式ドキュメントサイトRequestオブジェクトの詳細を読むことができます。

技術的な詳細

from starlette.requests import Requestも使用できます。

FastAPIは、開発者にとっての利便性として直接提供していますが、Starletteから直接来ています。