응답 헤더¶
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는 starlette.responses를 fastapi.responses로 개발자의 편의를 위해 직접 제공하지만, 대부분의 응답은 Starlette에서 직접 제공됩니다.
그리고 Response는 헤더와 쿠키를 설정하는 데 자주 사용될 수 있으므로, FastAPI는 fastapi.Response로도 이를 제공합니다.
커스텀 헤더¶
‘X-’ 접두어를 사용하여 커스텀 사설 헤더를 추가할 수 있습니다.
하지만, 여러분이 브라우저에서 클라이언트가 볼 수 있기를 원하는 커스텀 헤더가 있는 경우, CORS 설정에 이를 추가해야 합니다(CORS (Cross-Origin Resource Sharing)에서 자세히 알아보세요). expose_headers 매개변수를 사용하여 Starlette의 CORS 설명서에 문서화된 대로 설정할 수 있습니다.