이번 포스트는 FastAPI에 대한 소개와 Docker Image를 제작하여 간단하게 서비스화를 시켜보도록 하겠습니다.
FastAPI
문서 : https://fastapi.tiangolo.com 소스 코드 : https://github.com/tiangolo/fastapi
깃허브에서는 아래와 같이 한 줄로 요약이 되어 있습니다.
"FastAPI는 표준 파이썬 타입 힌트를 바탕으로 한 파이썬 3.6이상에서 작동하는, 현대적이고 빠른(고성능) API 서버 웹 프레임워크다."
이름에서 보이는 것과 같이 빠른 API 서비스를 구축하는 프레임 워크라고 설명하고 있습니다.
FastAPI에서 말하는 특징은 아래와 같습니다.
- NodeJS 및 Go와 비슷한 성능, 현존하는 파이썬 웹 프레임워크 중 가장 빠르다.
- 개발 속도가 빠르다
- 버그가 적다.
- 직관적이다
- 간편하다.
- 코드 중복을 최소화한다.
- 견고하다, 대화형 자동 설명서를 사용해서 실행 가능한 코드를 구축할 수 있다.
- 개방형 API 표준(OpenAPI&JSON)을 기반으로 한다.
아직 Python 웹 프레임워크인 Django
나 Flask
보다 레퍼런스는 적어 공식문서에 굉장한 공을 들인 느낌입니다.
Swagger 지원
Swagger는 OpenAPI에 맞게 디자인
Fast API는 기본적으로 Swagger를 탑제하고 있습니다.
그래서 아래와 같이 따로 설치하지 않아도 Swagger UI를 통해 사용이 가능합니다.
Redoc 지원
Redoc은 API를 자동으로 문서화 시켜주는 툴이다.
Fast API로 서비스를 개발 한 뒤 이 API를 사용 할 다른 프로젝트 팀에게 문서화를 하여 줄 때 사용합니다.
FastAPI는 Redoc을 기본적으로 내장하고 있기 때문에 쉽고 빠르게 개발이 가능합니다.
쉬운 디버깅
FastAPI는 Python type hints를 사용하기 때문에 파마미터의 타입을 명시할 수 있습니다.
그래서 Type Check가 가능하며, data의 validation을 자동으로 해주고 오류 시 Error를 생성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from typing import List, Dict
from datetime import date
from pydantic import BaseModel
# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date