본문 바로가기

Fast API/Fast API 이해

[FastAPI] Response Model

 

공식문서 튜토리얼 중에 반드시 알아야 할 부분이라 생각하고 글을 남긴다.

 

Fast API에서는 response_model 이라는 모델이 있다. 이 모델은 path operation의 app.post ("이 부분")에서 사용이 된다.

 

인자를 쉽게 정형화 하여 보낼 수 있고, 모델에 정의된 값들만 형식에 맞춰 보낼 수 있는 장점이 있다.

 

response_model의 특징을 보자 !

  • output 데이터를 선언한 타입에 맞게 컨버팅
  • 데이터 유효성 검사
  • JSON 직렬화
  • automatic documenting

또한, 이번 글에서 다룰 라이브러리를 잠시 살펴보자.

from fastapi import FastAPI, Query, Body
from typing import Optional

from pydantic import BaseModel, HttpUrl, EmailStr


app = FastAPI()


class UserIn(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None


class UserOut(BaseModel):
    username: str
    email: EmailStr
    full_name: Optional[str] = None


@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn):
    return user

소스 코드를 보면, 

 

UserIn -> response body로 들어오며 새로운 유저를 만들기 위한 폼이다.

 

UserOut -> 생성된 유저에 대한 정보를 다시 클라이언트에게 보내게 되는 모델이다.

( 출력모델은 password 값을 보내지 않는 것을 확인할 수 있다. )

 

Response Model Include/Exclude

response_model_include -> 특정 필드만을 내보내고 싶을 때 사용.

 

response_model_exclude -> 특정 필드를 제외하고 나머지 필드를 내보내고 싶을 때 사용.

 

@app.get(
    "/items/{item_id}/name",
    response_model=Item,
    response_model_include={"name", "description"},
)
async def read_item_name(item_id: str):
    return items[item_id]

@app.get("/items/{item_id}/public", response_model=Item, response_model_exclude={"tax"})
async def read_item_public_data(item_id: str):
    return items[item_id]

 

 

Response Model Exclude Unset

response_modeldefault 값이 선언되어 있고, 이 값이 api.get 과 같은 path operation으로 값이 보내지 때

 

default 값도 보내지게 된다. 

 

default 값을 보내지 않기 위해서는 response_model_exclude_unset 라이브러리를 사용한다.

 

-> 결론은 바뀌지 않는 값들을 제외하고 데이터를 보낸다.

 

@app.get("/items/{item_id}", response_model=Item, response_model_exclude_unset=True)
async def read_item(item_id: str):
    return items[item_id]