High Performance : Node.js, go와 대등한 성능
Easy : Flask와 비슷한 구조, Microservice에 적합
Productivity : Swagger 자동 생성, Pydantic을 이용한 Serialization
장점
아직 Flask 유저가 더 많음
ORM 등 Database와 관련된 라이브러리가 적음
FastAPI 프로젝트시 필요한 패키지
Dependency Resolver로 복잡한 의존성들의 버전 충돌을 방지
Virtualenv를 생성해서 격리된 환경에서 빠르게 개발이 가능해짐
기존 파이썬 패키지 관리 도구에서 지원하지 않는 Build, Publish가 가능
pyproject.toml을 기준으로 여러 툴들의 config를 명시적으로 관리
새로 만든 프로젝트라면 poetry를 사용해보고, virtualenv 등과 비교하는 것을 추천
공식 홈페이지 링크 : https://python-poetry.org/docs/
설치 코드
MAC OSX / Linux : curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Windows(Powershell) :
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -
어떤 Resource를 식별하고 싶은 경우(그러나 kyle이란 유저는 없는 경우)
/users/kyle : Path -> 저 경로에 존재하는 내용이 없으면 404 error
/users?name=kyle : Query -> 데이터가 없는 경우 빈리스트 -> Error Handling 필요함
Resource를 식별해야 하는 경우 : Path Parameter가 더 적합
정렬, 필터링을 해야 하는 경우 : Query Parameter가 더 적합
pip install python-multipart
pip install Jinja2 # 프론트도 간단히 만들기 위해 Jinja2 설치
Validation Check Logic
사용할 수 있는 방법
1) 일반 Python Class를 활용한 Input Definition 및 Validation
-> 의미 없는 코드 많아짐
2) Dataclass를(python 3.7 이상 필요) 활용한 Input Definition 및 Validation
-> 인스턴스 생성 시점에서 Validation을 수행하기 쉬움
-> 여전히 Validation 로직들을 직접 작성해야 함
-> Validation 로직을 따로 작성하지 않으면, 런타임에서 type checking을 지원하지 않음
3) Pydantic을 활용한 Input Definition 및 Validation
-> 훨씬 간결해진 코드 (6라인)(vs 52라인 Python Class, vs 50라인 dataclass)
-> 주로 쓰이는 타입들(http url, db url, enum 등)에 대한 Validation이 만들어져 있음 - 런타임에서 Type Hint에 따라서 Validation Error 발생
-> Custom Type에 대한 Validation도 쉽게 사용 가능
Pydantic은 Config을 체계적으로 관리할 방법을 제공
기존에 다른 라이브러리들은 어떻게 Config를 설정하고 있을까?
Twelve-Factor
설정을 코드에서 엄격하게 분리하는 것을 요구함
설정을 환경 변수(envvars나 env라고도 불림)에 저장함
환경 변수는 코드 변경 없이 쉽게 배포 때마다 쉽게 변경할 수 있음
SaaS(Software as a Service)를 만들기 위한 방법론을 정리한 규칙들에 따르면, 환경 설정은 애플리케이션 코드에서 분리되어 관리되어야 함
https://12factor.net/ko/config
1) .ini, .yaml 파일 등으로 config 설정하기
2) flask-style config.py
3) pydantic base settings