レスポンスヘッダー¶
🌐 AI と人間による翻訳
この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝
原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖
AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。
Response パラメータを使う¶
(Cookie と同様に)path operation 関数で 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 はその一時的なレスポンスからヘッダー(Cookie やステータスコードも含む)を取り出し、response_model によってフィルタされた返却値を含む最終的なレスポンスに反映します。
また、依存関係の中で Response パラメータを宣言し、その中でヘッダー(や Cookie)を設定することもできます。
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 は、開発者であるあなたへの便宜として、starlette.responses と同じものを fastapi.responses として提供しています。しかし、利用可能なレスポンスの大半は直接 Starlette から来ています。
また、Response はヘッダーや Cookie を設定するのによく使われるため、FastAPI は fastapi.Response でも提供しています。
カスタムヘッダー¶
独自のカスタムヘッダーは、X- プレフィックスを使って追加できることに注意してください。
ただし、ブラウザのクライアントに見えるようにしたいカスタムヘッダーがある場合は、CORS 設定にそれらを追加する必要があります(CORS (Cross-Origin Resource Sharing) を参照)。このとき、Starlette の CORS ドキュメントに記載の expose_headers パラメータを使用します。