Skip to content

12. Extra Data Types


1. Extra Data Types

  • 지금까지 다음과 같은 일반적인 데이터 타입을 사용했다.


1] int

2] float

3] str

4] bool


  • 하지만 이것 말고도 더 복잡한 데이터 타입을 사용할 수도 있다.


2. Other data types

  • 다음과 같은 추가 데이터 타입이 있다.


1] UUID

  • 많은 데이터베이스 및 시스템에서 ID로 사용되는 표준 "Universally Unique Identifier"이다.
  • requests 및 responses에서 str으로 표시된다.

2] datetime.datetime

  • Python datetime.datetime이다.
  • requests 및 responses에서 2008-09-15T15:53:00+05:00과 같이 ISO 8601 형식의 str으로 표시된다.

3] datetime.date

  • Python datetime.date이다.
  • requests 및 responses에서 2008-09-15과 같이 ISO 8601 형식의 str으로 표시된다.

4] datetime.time

  • Python datetime.time이다.
  • requests 및 responses에서 14:23:55.003과 같이 ISO 8601 형식의 str으로 표시된다.

5] datetime.timedelta

  • Python datetime.timedelta이다.
  • requests 및 responses에서 초에 대한 float으로 표시된다.

6] frozenset

  • requests 및 responses에서 set와 동일하게 처리된다.
  • requests에서 리스트를 읽어 중복을 제거하고 set로 변환한다.
  • 그런 다음 responses에서 setlist로 변환된다.

7] bytes

  • 표준 Python bytes이다.
  • requests 및 responses에서 str으로 처리된다.
  • 생성된 스키마는 binary 형식의 str으로 지정한다.

8] Decimal

  • 표준 Python Decimal이다.
  • requests 및 responses에서 float과 동일하게 처리된다.


3. Example

  • 다음의 예제는 위의 타입 중 일부를 사용하는 매개변수가 있는 path operation을 작성하는 예제이다.


from datetime import datetime, time, timedelta
from uuid import UUID
from typing import Optional
from fastapi import FastAPI, Body

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),
    repeate_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": repeate_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
    }


  • 함수 내부의 매개변수에는 고유한 데이터 타입이 있다.


  • 또한 다음과 같이 날짜 연산 및 조작을 수행할 수 있다.


from datetime import datetime, time, timedelta
from typing import Optional
from uuid import UUID
from fastapi import FastAPI, Body

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),
    repeate_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": repeate_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
    }

References