FastAPI 05. 반환 모델과 유사한 모델들 생성하기

2023. 1. 18. 15:06·Python/Python Web Framework

반환 모델 작성하기

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
'Python/Python Web Framework' 카테고리의 다른 글
  • FastAPI 04. 바디의 예시 만들기
  • FastAPI 03. 리퀘스트 바디
  • FastAPI 02. 경로, 쿼리 매개변수 검증
  • FastAPI 01. 첫걸음
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    DP
    파이썬
    web framework
    백준
    SSAFY
    카카오
    markdown
    ps
    project_zero
    브루트포스
    Combinatorics
    fastapi
    프로젝트
    조건분기
    trie
    프로그래머스
    line
    회고
    Python
    DRF
    django
    bfs
    그리디
    dfs
    union-find
    알고리즘
    코딩테스트
    게임이론
    pydantic
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
FastAPI 05. 반환 모델과 유사한 모델들 생성하기
상단으로

티스토리툴바