공식문서 튜토리얼 중에 반드시 알아야 할 부분이라 생각하고 글을 남긴다.
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_model에 default 값이 선언되어 있고, 이 값이 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]