반환 내용에 대해 정의 해두고 싶을 수 있다.
from typing import List
from pydantic import BaseModel
...
class TodoResponse(BaseModel):
todos : List[TodoItem]
class Config:
json_schema_extra = {
"example" : {
"todos" : [
{
"item" : "item1",
"name" : "name1"
},
{
"item" : "item2",
"name" : "name2"
}
]
}
}
from fastapi import APIRouter, Path
from todo.model import TodoItem, TodoResponse
todo_router = APIRouter(
prefix="/api",
tags=["todo"]
)
todo_list = []
...
@todo_router.get("/todo", response_model=TodoResponse)
async def getTodo() -> dict:
return {"todos" : todo_list}
다음과 같이 코드를 수정하면

문서에 반영된 것을 확인할 수 있다.
from fastapi import APIRouter, Path, HTTPException, status
from todo.model import TodoItem, TodoResponse
todo_router = APIRouter(
prefix="/api",
tags=["todo"]
)
todo_list = []
...
@todo_router.get("/todo", response_model=TodoResponse)
async def getTodo() -> dict:
size = len(todo_list)
if size == 0:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="todo list is empty!"
)
return {"todos" : todo_list}
만약 리스트가 비어 있다면 404 에러가 나며 todo list is empty! 라는 에러를 내려주도록 했다.

다음과 같이 내가 발생시킨 에러를 확인할 수 있다.
fastapi를 사용하면 에러를 따로 처리할 필요 없이 다음과 같이 detail에 적힌 내용으로 내려가도록 처리되어 있다.