FastAPI 알아보기

d4v1d·2022년 3월 10일
0

개요

Python3.6+ API 빌드를 위한 웹 프레임워크 FastAPI를 소개하는 포스트입니다. 🐹

What is FastAPI?

Modern and Fast
빠르고 강력하다! FastAPI를 설명하는 직관적인 두 단어입니다.
FastAPI는 Python3.6+ API 빌드를 위한 웹 프레임워크로, Python 3.6 type hint 기반으로 설계되었기 때문에 안정적이면서도 동시에 높은 성능을 낼 수 있습니다.

특징

  • 빠르다. Starlette(비동기 API 서버 지원) Pydantic(데이터 검증 지원)덕에 NodeJS 및 Go와 대등한 정도의 성능
  • 빠른 코드 작성
  • 사람에 의한 버그 감소
  • 짧고, 쉽고, 직관적인 코딩
  • OpenAPI 지원을 통한 자동 스웨거 생성
  • 아직 커뮤니티가 크지 않지만 대신 공식 문서가 엄청 잘 되어있음(한국어 지원)

같은 python 웹 프레임워크인 Flask와 FastAPI를 비교한 포스트 링크를 첨부합니다!

Getting Started

설치하기

pip install "fastapi[all]" # uvicorn 패키지를 포함하여 모든 dependencies와 features를 설치!

Hello World

다음은 간단한 FastAPI 예제 코드입니다.

main.py

# main.py
from fastapi import FastAPI

app = FastAPI()

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

Live server 실행 + http://localhost:8000 접속

» uvicorn main:app --reload
# main: main.py
# app: main.py에서 생성된 object (app = FastAPI())
# --reload: hot reload 옵션 (코드 변경 시 서버 reload)

# Output
INFO:     Will watch for changes in these directories: ['/my/directory/Fastapi']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [16363] using watchgod
INFO:     Started server process [16365]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

URL mapping

# main.py
from typing import Optional

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Interactive API docs
http://localhost:8000/docs 에 접속하면 대화형 API 창을 확인할 수 있습니다.
일반적으로 Postman Agent에서 http 리퀘스트를 보내 간단히 서버 응답을 테스트하는데, 이 기능이 FastAPI에 내장되어있습니다!

Alternative API docs

참고

Uvicorn

Uvicorn은 Python asyncio 프레임워크를 위한 low-level 서버/애플리케이션 인터페이스를 지원하는 ASGI(Asynchronous Server Gateway Interface) 웹 서버입니다. FastAPI로 작성된 코드는 CLI에서 uvicorn 명령어로 실행합니다.

정리

기존에 많이 사용하던 Django, Flask와 마찬가지로 Python 기반 API 서버를 구현하는 코드를 작성하는 프레임워크인데, Flask와 비슷하지만 기능적으로 보완(비동기 요청 처리, )된 형태라고 보시면 됩니다. API 요청 처리에 특화된 '모던하고 빠른' 트렌디한 웹 프레임워크입니다. 🦊

profile
데이터 엔지니어/백엔드 개발자 d4v1d의 개발 일지🐯

0개의 댓글