FastAPI

요즘 핫한 가벼운 파이썬 프레임워크 FastAPI

쿠카이든 2022. 4. 13. 12:18
728x90
  • Python은 Django, Flask, Falcon 같은 프레임워크로 인해 lightweight web apps 을 신속히 개발함에 있어서 좋은 선택입니다.
  • 수 년동안 Flask는 이를 위한 최고의 프레임워크였지만, 이에 FastAPI라는 새로운 도전자가 나타났습니다.
  • FastAPI는 고성능(high performance), 낮은 진입장벽(easy to learn),  높은 생산성(fast to code), ready for production 라고 소개하고 있습니다.

 

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.

주요 기능

  • Fast: Starlette, Pydantic 덕분에 NodeJS 및 Go 와 동등한 고성능.
  • Fast to code: 200% ~ 300% 의 생산성 향상.
  • Fewer bugs: 휴먼 에러율이 40% 감소.
  • Intuitive: 대부분의 editor 지원. 디버깅 시간 감소.
  • Easy: 쉽게 사용하고 학습하도록 디자인. 문서 읽는 시간 감소.
  • Short: 중복 코드 최소화.
  • Robust: 자동 문서화 등 production 을 위한 코드.
  • Standard-based: OpenAPI(Swagger), JSON Schema 등 호환.

시작하기

FastAPI는 Python의 type hints 기반에서 동작함으로  Python 3.6+ 이 필요합니다. 

$ pip install fastapi

또한, Production 환경을 위해 Uvicorn, Hypercorn의 ASGI server도 필요합니다.

$ pip install uvicorn

{"Hello": "World"} 를 출력하는 간단한 API를 작성해 보겠습니다.

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    return {"Hello": "World"}
$ uvicorn main:app --reload
$ curl -X GET http://127.0.0.1:8000/
  • 위에서 기능 중에 하나로 Read for production 말씀드렸습니다. 아래처럼 docs/, redoc/에 접근해보면 Swagger, redoc이 자동으로 호환되어 있는 걸 볼 수 있습니다.

http://127.0.0.1:8000/docs 접속한 화면


http://127.0.0.1:8000/redoc 접속한 화면

 

  • Production 레벨에서의 API는 기능 개발이 전부가 아닙니다.
  • 기능 개발, 문서화, 명세서 등 통신과 협업을 위해 필요한 문서들을 FastAPI에서는 자동으로 지원해주니 그 시간에 비즈니스 로직이나 테스트코드를 작성하여 제품의 품질을 높이는데 집중할 수도 있을 것 같습니다. 
  • 즉 동일한 리소스로 좀 더 높은 품질의 제품을 생산할 수 있을 것입니다. 

 


Async

NodeJS와 Go와 비교하였을 때 Python 프레임워크의 가장 큰 단점은 요청을 비동기로 처리 할 수 없다는 점입니다. 하지만 ASGI가 도입된 이후로 이는 더 이상 문제가 되지 않고, FastAPI는 이를 최대한으로 활용하고 있습니다. 단지 함수에 async만 선언하면 비동기 처리가 가능합니다.

@app.get("/")
async def root():
    return {"Hello": "World"}

python에서 Django, flask가 API를 생산하는데 최고의 도구입니다.  

하지만 FastAPI의 멋진 기능들로 인해 새로운 강자가 태어날 듯 합니다!

출처 : https://fastapi.tiangolo.com/ko/

 

 

 

728x90

'FastAPI' 카테고리의 다른 글

Tortoise ORM 공식 문서 예제  (0) 2022.04.20