コンテンツにスキップ

レスポンスヘッダー

Responseパラメータを使用する

パスオペレーション関数で、Response型のパラメータを宣言できます(クッキーの場合と同様)。

そして、その一時的なレスポンスオブジェクトにヘッダーを設定できます。

from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

そして、通常どおり、必要なオブジェクト(dict、データベースモデルなど)を返すことができます。

そして、response_modelを宣言した場合、それは返されたオブジェクトをフィルタリングおよび変換するために使用されます。

FastAPIは、その一時的なレスポンスを使用して、ヘッダー(クッキーとステータスコードも)を抽出し、返された値をresponse_modelでフィルタリングした最終的なレスポンスにそれらを含めます。

依存関係でResponseパラメータを宣言し、それらにヘッダー(およびクッキー)を設定することもできます。

Responseを直接返す

Responseを直接返すときにヘッダーを追加することもできます。

レスポンスを直接返すの説明に従ってレスポンスを作成し、追加のパラメータとしてヘッダーを渡します。

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)

「技術的な詳細」

from starlette.responses import Responseまたはfrom starlette.responses import JSONResponseを使用することもできます。

FastAPIは、開発者の便宜のために、fastapi.responsesとして同じstarlette.responsesを提供します。ただし、利用可能なレスポンスのほとんどはStarletteから直接提供されています。

また、Responseはヘッダーとクッキーの設定によく使用されるため、FastAPIfastapi.Responseでも提供しています。

カスタムヘッダー

カスタムのプロプライエタリヘッダーは、「X-」プレフィックスを使用して追加できることに注意してください。

ただし、ブラウザのクライアントが表示できるカスタムヘッダーがある場合は、それらをCORS構成に追加する必要があります(CORS(Cross-Origin Resource Sharing)を参照してください)。StarletteのCORSドキュメントに記載されているexpose_headersパラメータを使用します。