반환 모델 작성하기
FastAPI는 기본적으로 사용하는 모델을 추정하여 입출력값을 나타내지만 자동적으로 표현해 주는 기능에만 의존할 수는 없다. 예를 들어 게시판의 글의 목록과 각각의 글을 불러오는 API가 있을 때, 다음과 같이 설계할 수 있다.
- 게시판 글 목록 : 글 번호, 글 제목, 조회 수, 댓글 수, 작성일
- 게시판 글 : 글 제목, 글 내용, 조회수, 댓글 수, 댓글 목록, 작성일
이러한 경우 각 API에 맞도록 반환모델을 기록하는것이 개발에 도움이 될 수 있다. FastAPI에서 반환 모델을 명시하는 방법은 크게 2가지이다. 첫 번째는 Python함수 반환값을 나타내듯이->
를 사용하여 반환 타입을 입력하는 방법이고, 다른 방식은response_model
값을 지정하는 방식이다.
@app.post("/items/")
async def create_item(item: Item) -> Item:
return item
@app.get("/items/", response\_model=list\[Item\])
async def read\_item():
return \[
Item(name="Foo", price=52),
Item(name="Baa", price=93),
\]
두 방식을 모두 활용할 수도 있고, 이전에 다루었던 API 반환 값 예시도 같이 활용할 수 있다.
유사한 모델 그룹 생성하기
위의 게시판 예시를 더 확장해서 생각해보자. 다음과 같은 게시판 글 목록이나, 게시글 내용뿐만 아니라, 게시글 수정이나 특정 게시글 조회 등의 경우에 다른 반환값 형태를 가진다고 했을 때, 모든 모델 형태를 입력하는 것은 번거롭다. 또 다른 예시는 회원가입, 로그인 등을 생각해 볼 수 있다. 대표적으로 비밀번호의 입력은 받더라도, 데이터베이스에는 암호화된 형태만 사용한다거나, 비밀번호는 절대 반환하지 않는 것 등이 있다.
class UserBase(BaseModel):
username: str
email: EmailStr
class UserInput(UserBase):
password: str
class UserOutput(UserBase):
pass
이러한 문제는 Pydantic을 활용하여 해결할 수 있다. 각 모델을 정의한 클래스 상속을 사용하여 나타내는 방식이다. 이 부분은 Pydantic을 더 다루어볼 기회가 있다면 공유하겠다.
'Python > Python Web Framework' 카테고리의 다른 글
FastAPI 04. 바디의 예시 만들기 (0) | 2023.01.16 |
---|---|
FastAPI 03. 리퀘스트 바디 (0) | 2023.01.10 |
FastAPI 02. 경로, 쿼리 매개변수 검증 (0) | 2023.01.06 |
FastAPI 01. 첫걸음 (0) | 2023.01.04 |
Django DRF에서 serializer와 pydantic (0) | 2022.02.26 |
댓글