본문 바로가기
프로그래밍/Python

FastAPI

by Hwan,. 2023. 1. 12.
728x90
반응형

FastAPI

FastAPI는 Python 3.6이상의 API를 빌드하기 위한 빠르고 현대적인 웹 프레임워크이다.
웹 부분을 위한 Starlette와 데이터 부분을 위한 Pydantic 덕분에 NodeJS와 Go에 대등할 정도로 높은 성능을 가지고 있으며, 빠른 코드 작성이 가능하다. 직관적이고 쉬운 코드로 인해 휴먼 에러가 약 40%(내부 개발팀 테스트 기준) 감소했다고 한다. 또한 API에 완전히 호환되는 개방형 표준을 기반으로 하여 Swagger(OpenAPI)와 json Schema를 지원한다.

개인적으로는 Flask와 문법이 비슷하지만 기본적으로 추가된 기능이 많고 Django보다는 자동화(?)는 덜 되었지만 훨씬 가볍고 빠르다는 느낌을 받았다.

자세한 내용은 아래 공식문서를 참고
https://fastapi.tiangolo.com/ko/

 

FastAPI

FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬

fastapi.tiangolo.com


설치 및 실행

pip를 통해 설치한다. 제품화를 위해서는 Uvicorn이나 Hypercorn과 같은 ASGI 서버가 필요하다.
패키지의 설치는 https://hwan001.tistory.com/308 글을 참고하면 편하다.

pip install fastapi
pip install "uvicorn[standard]"


위 공식 링크에 있는 main.py 예제를 가져와봤다.

from typing import Union
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: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

위 10줄의 코드로 2개의 엔드포인트가 완성된다.

코드를 실행하려면 uvicorn이 필요하다.

uvicorn main:app --reload


공식 문서에서는 위 명령어로 방법을 설명하지만, pip로 "uvicorn[standard]"을 install 하면 에러가 발생하고 명령어로 쳐봐도 당연히 실행되지 않는다. 그래서 아래처럼 python 코드 상에서 실행하는 방법을 찾았다.
실행에 문제가 없고 디버깅 측면에서도 더 좋다고 생각한다.

from typing import Union
from fastapi import FastAPI
import uvicorn # pip install uvicorn

app = FastAPI()

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

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

if __name__ == "__main__":
    uvicorn.run(app, port=8000)


코드를 실행 후 http://127.0.0.1:8000/items/5?q=somequery로 접속하면 JSON 응답을 볼 수 있고,


http://127.0.0.1:8000/docs (또는 redoc)로가면 Swagger UI로 자동 작성된 API 문서를 볼 수 있다.

docs
redoc


 

비동기 처리

FastAPI의 장점 중 하나는 비동기 처리를 지원한다는 점이다.
아래처럼 직접 작성한 코드나 라이브러리가 비동기 기능을 사용할 경우 async def 를 사용할 수 있다.

@app.get('/')
async def read_results():
    results = await some_library()
    return results

 

참고 링크

https://wikidocs.net/book/8531

 

점프 투 FastAPI

점프 투 FastAPI는 파이보라는 이름의 파이썬 게시판(Python Board) 서비스를 만들어가는 과정을 설명한 FastAPI 입문서이다. 파이썬 설치부터 시작하여 서…

wikidocs.net

https://github.com/tiangolo/fastapi

 

GitHub - tiangolo/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for production

FastAPI framework, high performance, easy to learn, fast to code, ready for production - GitHub - tiangolo/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for produ...

github.com

 

728x90
반응형

댓글