FastAPI가 설치된 로컬에서 다음 명령어를 사용하면 설치 목록을 볼 수 있다.
pip list
이 리스트 중 2가지에 집중한다.
위 2가지 리스트는 FastAPI를 설치하면 자동으로 같이 설치되는 라이브러리이다.
간단하게 소개하자면,
starlette은 FastAPI가 사용하는 웹 프레임워크이며,
Pydantic은 파이썬 타입 어노테이션 문법에 근거하여 데이터 검증을 해주는 라이브러리이다.
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
class User(BaseModel) :
id : int
name = 'Jun'
signing_ts : Optional[datetime] = None
friends = List[int] = []
external_data = {
'id' : '123',
'signing_ts' : '2022-01-01 12:00',
'friends' : [1, 2, '3'],
}
user = User(**external_data)
위처럼 User라는 class에 데이터 형식을 적어준 후, external_data 안에 선언한 데이터 형식과 다른 데이터를 선언해주면 어떻게 될까?
print(user.id)
>>> 123
external_data 에서는 id 값을 문자열로 주었지만, 출력문에서는 정수형으로 바뀌었다.
print(user.friends)
>>> [1, 2, 3]
리스트 안에 있는 문자열이 정수형으로 변하였다.
그럼 모든 데이터를 딕셔너리 형태로 출력하겠다.
print(user.dict())
>>>
{
'id' : 123,
'name' : 'Jun',
'signing_ts' : datetime.datetime(2022, 1, 1, 12, 00),
'friends' : [1, 2, 3],
}
위의 예시를 보며 느낀 것은 Pydantic은 단순히 타입 검사만 하는 것이 아닌 타입 변형(cast)까지 해준다.
그렇기에 문자열로 통신하는 HTTP 환경에서 도움을 받을 수 있다.
예를 들어,
GET user/123 을 호출할 시, 123은 실제 문자열이지만, 웹 어플리케이션은 문자열인지 정수형인지 알 수 없다.
이 때, Pydantic을 사용하면 개발자가 원하는 타입으로 받을 수 있다.