FastAPI에서는 HTTP 응답 상태코드를 직접 지정해줄 수 있다.
from typing import Union
from fastapi import FastAPI, Path, Query, status
app = FastAPI()
@app.get("/items/{item_id}", status_code=201)
async def read_items(
item_id: int = Path(title="The ID of the item to get"),
q: Union[str, None] = Query(default=None, alias="item-query"),
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
@app.get("/items/{item_id}", status_code=201)
이 부분이 HTTP 응답 코드를 지정하는 부분이다.
get
메소드는 제대로 받았다면 상태코드 200으로 응답하는데, 201로 변경했기 때문에 응답도 201로 날라온다.
또한, 조건에 따라 상태 코드를 다르게 반환할 수 있다.
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]
Response
유형의 매개변수를 선언하고 status_code
를 지정하여 조건부 상태코드를 변경 가능하다.