응답 상태 코드 바꾸기
응답 상태 코드 바꾸기 (Response - Change Status Code)
이전에 기본 Response Status Code를 설정할 수 있다는 걸 이미 읽어 보셨을 거예요.
그런데 기본값과 다른 상태 코드를 돌려줘야 하는 경우가 있어요.
출처: 공식문서
사용 사례
예를 들어, 기본적으로 HTTP 상태 코드 "OK" 200을 돌려준다고 상상해 봐요.
그런데 그 데이터가 존재하지 않으면, 그걸 생성하고 HTTP 상태 코드 "CREATED" 201을 돌려주고 싶어요.
그럼에도 돌려주는 데이터를 response_model로 여전히 필터링·변환하고 싶어요.
이런 경우에 Response 파라미터를 사용할 수 있어요.
Response 파라미터 사용하기
_path operation 함수_에 Response 타입의 파라미터를 선언할 수 있어요(쿠키와 헤더에서 하듯이).
그리고 그 임시 response 객체에 status_code를 설정할 수 있습니다.
from fastapi import FastAPI, Response, status
app = FastAPI()
tasks = {"foo": "Listen to the Bar Fighters"}
@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
if task_id not in tasks:
tasks[task_id] = "This didn't exist before"
response.status_code = status.HTTP_201_CREATED
return tasks[task_id]
그리고 평소처럼 필요한 객체(dict, 데이터베이스 모델 등)를 돌려주면 됩니다.
response_model을 선언했다면, 여전히 돌려준 객체를 필터링하고 변환하는 데 사용돼요.
FastAPI는 그 임시 response에서 상태 코드(쿠키와 헤더도 함께)를 추출해서, 여러분이 돌려준 값을 담고 어떤 response_model로 필터링된 최종 response에 넣습니다.
의존성에서도 Response 파라미터를 선언하고 그 안에서 상태 코드를 설정할 수 있어요. 다만 마지막에 설정된 값이 이긴다는 점만 기억하세요.