2.8 KiB
レスポンスヘッダー
Response パラメータを使う
(Cookie と同様に)path operation 関数で Response 型のパラメータを宣言できます。
そして、その一時的なレスポンスオブジェクトにヘッダーを設定できます。
{* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
その後は通常どおり、必要な任意のオブジェクト(dict、データベースモデルなど)を返せます。
response_model を宣言している場合は、返したオブジェクトのフィルタと変換に引き続き使用されます。
FastAPI はその一時的なレスポンスからヘッダー(Cookie やステータスコードも含む)を取り出し、response_model によってフィルタされた返却値を含む最終的なレスポンスに反映します。
また、依存関係の中で Response パラメータを宣言し、その中でヘッダー(や Cookie)を設定することもできます。
Response を直接返す
Response を直接返す場合にもヘッダーを追加できます。
Response を直接返す{.internal-link target=_blank} で説明したようにレスポンスを作成し、ヘッダーを追加のパラメータとして渡します:
{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
/// note | 技術詳細
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){.internal-link target=_blank} を参照)。このとき、Starlette の CORS ドキュメントに記載の expose_headers パラメータを使用します。