응답 상태 코드 바꾸기

응답 상태 코드 바꾸기 (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 파라미터를 선언하고 그 안에서 상태 코드를 설정할 수 있어요. 다만 마지막에 설정된 값이 이긴다는 점만 기억하세요.

더 알아보기 (Learn more)