Victoree's Blog

[1] Fast API로 한걸음! 본문

Python/Fast API

[1] Fast API로 한걸음!

victoree 2021. 7. 19. 11:34
728x90

FastAPI는 Python 기반으로 Flask와 같은 개발 편의성에 NodeJS, Go와 같은 성능과 안정성을 갖춘 Web Framework이다.

공식 페이지에서 언급하는 Key Feature는 다음과 같다.

  • Fast / Fast to code / Fewer bugs / Intuitive / Easy / Short / Robust / Standards-based

특징은 다음과 같다.

  • Starlette 프레임워크를 기반으로 한 비동기 API 서버 지원
  • Pydantic을 사용한 Data validation 지원
  • API Swagger, ReDoc 등을 사용한 API document 자동 생성 지원
  • NodeJS, Go와 대등할 정도로 매우 높은 성능
  • Python3.6+ Type Hinting 지원

 

Fast API에서 지원하는 기능들로!

  • Headers, Cookies, Form Fields, Files 등에 파라미터 정의 기능
  • maximum_length, regex 와 같은 validation constraints 설정 가능
  • 사용하기 쉬운 의존성 주입
  • OAuth2, JWT Tokens 및 HTTP Basic Auth 기능을 포함한 보안과 인증 기능
  • Pydantic 덕에 가능해진 중첩 JSON 모델 선언
  • Starlette 덕에 가능해진
    • WebSockets
    • GraphQL
    • requests와 pytest 를 기반으로 한 극도로 쉬운 테스트
    • CORS
    • Cookie Sessions

Installation

다음 명령어를 이용해 fastapi를 설치할 수 있다.

$ pip install fastapi

또한 웹 서버로 사용될 uvicorn 도 설치한다.

$ pip install uvicorn
uvicorn은 Uvloop과 httptools를 기반으로 구축된 ASGI 서버(어플리케이션을 로드하고 제공하는 서버)이다.
자세한 내용은 Uvicorn 공식 페이지를 참조한다.

 

main.py를 만들어 다음과 같이 작성하세요.

from typing import Optional

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root(): # `async def`로 선언가능
    return {"Hello": "World"}

@app.get("/items/{item_id}") 
def read_item(item_id: int, q: Optional[str] = None): # `async def`로 선언가능
    return {"item_id": item_id, "q": q}

 

실행 명령어

uvicron main:app --reload

  • main: main.py 파일 (python 모듈)
  • app: the object created inside of main.py
    app = FastAPI()
  • reload: 코드 변경후 서버 재시작하기. 개발환경에서만 사용할 것
728x90
Comments