Skip to content

17. Response Status Code


1. Response Status Code

  • response 모델을 지정하는 것과 같은 방법으로 다음과 같은 모든 path operations에서 status_code 매개변수를 사용하여 HTTP 상태 코드를 선언할 수 있다.


1] @app.get()

2] @app.post()

3] @app.put()

4] @app.delete()

5] 기타


from fastapi import FastAPI

app = FastAPI()

@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}


Note

  • 여기서 주의해야 할 것은 status_code는 "데코레이터" 메소드(get, post 등)의 매개변수이며, 모든 매개변수 및 body와 같이 path operation function이 아니라는 것이다.


  • status_code 매개변수는 HTTP 상태 코드가 있는 숫자를 수신한다.


Note

  • status_code는 대안으로 Python의 http.HTTPStatus와 같은 IntEnum을 수신할 수도 있다.


  • 위의 예제를 실행하면, 다음과 같은 결과가 나온다.


1] response에서 상태 코드를 반환한다.

2] OpenAPI 스키마와 같은 문서에 표시된다.


001


2. About HTTP status codes

  • HTTP에서는 response의 일부로 3자리 숫자 상태 코드를 보낸다.
  • 이러한 상태 코드에는 인식할 수 있는 이름이 따로 있긴 하지만, 일반적으로 중요한 부분은 번호이다.


1] 100

  • "정보"에 대한 상태 코드이다.

2] 200

  • "성공"에 대한 상태 코드이다.

3] 300

  • "리디렉션"에 대한 상태 코드이다.

4] 400

  • "클라이언트 에러"에 대한 상태 코드이다.

5] 500

  • "서버 에러"에 대한 상태 코드이다.


3. Shortcut to remember the names

  • 위의 예제를 다시 살펴보자.


from fastapi import FastAPI

app = FastAPI()

@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}


  • 201은 "Created"에 대한 상태 코드인데, 이와 같은 식으로 모든 상태 코드를 위우는 것은 매우 어려운 일이다.


  • 그러므로 다음과 같이 fastapi.status를 사용한다.


from fastapi import FastAPI, status

app = FastAPI()

@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
    return {"name": name}

References