본문 바로가기
Fast API/fastapi배우기

Fast API 배우기 9부 - Extra Data Types

by 붕어사랑 티스토리 2021. 11. 1.
반응형

지금까지 봐 온 데이터 타입은 아래와 같다.

  • int
  • float
  • str
  • bool

하지만 Fast API는 훨 씬 더 많은 데이터 타입을 제공한다.

 

 

  • UUID:
    • "Universally Unique Identifier"의 약자 이다., 많은 데이터베이스 시스템에서 id로 사용된다.
    • request와 response는 전부 str로 표현된다.
  • datetime.datetime:
    • 파이썬의 datetime.datetime.
    • request와 response에서 str로 표현된다. ISO 8601 format을 따른다. ex: 2008-09-15T15:53:00+05:00.
  • datetime.date:
    • 파이썬의 datetime.date.
    • request와 response에서 str로 표현된다. ISO 8601 format을 따른다. ex: like: 2008-09-15.
  • datetime.time:
    • 파이썬의 datetime.time.
    • request와 response에서 str로 표현된다. ISO 8601 format을 따른다. ex: format, like: 14:23:55.003.
  • datetime.timedelta:
    • 파이썬의 datetime.timedelta.
    • request와 response에서 float으로 표현된다.
    • Pydantic 에서 "ISO 8601 time diff encoding"로 표현할 수 있다.
  • frozenset:
    • request와 response에서 set으로 취급된다.
      • request에서 list를 읽은뒤에 중복된 데이터를 제거하고 set으로 convert 해준다.
      • response에서 set데이터는 list로 convert 된다.
      • 생성된 스키마는 JSON Schema의 uniqueItems를 이용하여 set 값들을 고유하도록 만든다.
  • bytes:
    • 파이썬의 bytes.
    • request와 response에서 float으로 표현된다.
    • The generated schema will specify that it's a str with binary "format".
  • Decimal:
    • 파이썬의 Decimal.
    • request와 response에서 float으로 표현된다.

 

 

아래는 위 데이터들을 활용한 예제이다.

파이썬의 기본 자료형처럼 연산이 가능한거에 주목

 

from datetime import datetime, time, timedelta

from typing import Optional

from uuid import UUID


from fastapi import Body, FastAPI

app = FastAPI()


@app.put("/items/{item_id}")
async def read_items(
    item_id: UUID,
    start_datetime: Optional[datetime] = Body(None),
    end_datetime: Optional[datetime] = Body(None),
    repeat_at: Optional[time] = Body(None),
    process_after: Optional[timedelta] = Body(None),
):
    start_process = start_datetime + process_after
    duration = end_datetime - start_process
    return {
        "item_id": item_id,
        "start_datetime": start_datetime,
        "end_datetime": end_datetime,
        "repeat_at": repeat_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
    }
반응형

댓글