응답 모델 작성

심준석·2024년 5월 6일
0

FastAPI

목록 보기
9/11
post-thumbnail
post-custom-banner

응답 모델 작성

라우트 경로 정의

@app.get("/todo")
async def retreive_todo() -> dict:
    '''
    
    현재 DB에 있는 모든 todo 아이템의 목록을 반환
    '''
    return {
        "todos" : todo_list
    }

모든 todo를 추출해서 배열로 반환하는 라우트를 ID없이 todo 아이템만 반환하도록 변경하기 위해서 새로운 모델을 추가한다.

from typing import List

...

class TodoItems(BaseModel):
    todo: List[TodoItem]

    class Config:
        schema_extra = {
            "example": {
                "todos" : [
                    {
                        "item" : "Example schema 1"
                    },
                    {
                        "item" : "Example schema 2"
                    },
                ]
            }
        }

이제 todo.py에 있는 라우트에 다음과 같은 응답 모델을 추가해보자.

from model import Todo, TodoItem, TodoItems

@todo_router.get("/todo", resposn_model = TodoItems)
async def retreive_todos() -> dict:
    return {
        "todos":todo_list
    }

애플리케이션 실행

uvicorn main:app --host=127.0.0.1 --port 8000 --reload

이제 새로운 todo를 추가해주자.

curl -X 'POST' \
'http://127.0.0.1:8000/todo' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"id": 1,
"item": "This todo will be retrieved without exposing my ID!"
}'

todo를 추출해보자

curl -X 'GET' \
'http://127.0.0.1:8000/todo' \
-H 'accept: application/json'

결과



profile
Developer & Publisher 심준석 입니다.
post-custom-banner

0개의 댓글