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 스키마와 같은 문서에 표시된다.
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}