FastApi 반환 및 예외 처리

최준호·2024년 1월 31일

FastAPI

목록 보기
8/9
post-thumbnail

🔴 반환

반환 내용에 대해 정의 해두고 싶을 수 있다.

🟠 model

🟢 model 생성

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"
                    }
                ]
            }
        }

🟢 router 수정

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}

다음과 같이 코드를 수정하면

문서에 반영된 것을 확인할 수 있다.

🔴 예외 처리

🟠 Exception 발생

🟢 raise 만들기

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에 적힌 내용으로 내려가도록 처리되어 있다.

0개의 댓글