Fast API 사용해보기 - Setting

JinWooHyun·2021년 8월 10일
0

Fast API 프로젝트

목록 보기
1/6

Fast API 공식문서 튜토리얼

이 포스트는 Pycharm Pro 환경에서 Fast API 공식문서 튜토리얼을 진행합니다.

$ pip install fastapi
$ pip install uvicorn

파이참에서는 직접적으로 FastAPI를 지원하지 않기 때문에 새 프로젝트를 시작하기 위해서 조금 세팅을 해주어야 합니다.

저의 경우 python3.9, virtualenv를 이용해 새 프로젝트를 생성해주었습니다.

이런식으로 생성되었습니다.

아래와 같이 간단한 FastAPI 파일을 작성한 후

from fastapi import FastAPI

app = FastAPI()


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

파이참에서 실행/디버그 구성창을 열어 아래 처럼 uvicorn을 이용해 서버를 실행할 수 있도록 구성을 변경해줍니다.

기본적으로 서버는 8000번 포트에서 실행되며 만약 기본 포트를 변경하고 싶다면 매개변수 부분에 main:app --reload 부분에 main:app --reload --port=5000 이런 식으로 포트를 추가해주면 됩니다.

uvicorn main:app 명령은 다음을 의미합니다:
main: 파일 main.py (파이썬 "모듈").
app: main.py 내부의 app = FastAPI() 줄에서 생성한 오브젝트.
--reload: 코드 변경 후 서버 재시작. 개발에만 사용.

실행 버튼을 누르면 uvicorn을 사용해 정상적으로 서버가 실행되는 것을 확인할 수 있습니다.

D:\piclick\pythonProject\venv\Scripts\python.exe -m uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [26204] using statreload
INFO:     Started server process [6904]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

서버가 실행되면 FastAPI의 가장 큰 장점이라고 불리는 자동 API Doc 생성 기능을 사용할 수 있습니다.

브라우저로 http://127.0.0.1:8000/docs를 열게되면

자동으로 생성된 API 문서를 직접 실행시킬 수 있는 Swagger UI가 제공됩니다.

또한 브라우저로 http://127.0.0.1:8000/redoc를 열게되면

자동으로 생성된 ReDoc 형식의 문서를 제공해줍니다.

ReDoc?

  • redoc 은 OpenAPI Spec 파일을 읽어서 디플로이해주는 도구로 Swagger-UI 와 비슷한 역할을 수행합니다.
  • 설치와 사용이 아주 간편한 장점이 있지만 swagger-ui 랑 달리 브라우저에서 API TEST 기능을 해볼수는 없는 단점이 있습니다.
  • redoc은 local에서 작성한 API 가 제대로 문서화되었는지 빠르게 확인할 때 테스트할 때 유용합니다.

공식 문서에 따르면 FastAPIStarlette를 직접 상속하는 클래스이며, Starlette의 모든 기능을 사용할 수 있다고 나오는데,

Starlette is a lightweight ASGI(Asynchronous Server Gateway Interface) framework/toolkit, which is ideal for building high performance asyncio services.

Starlette는 ASGI를 사용해 FastAPI의 빠른 속도를 보장하게되는 이유인 것 같습니다.

FastAPIFlask와 함수 정의 방식이 비슷하지만

@app.post()
@app.put()
@app.delete()

@app.options()
@app.head()
@app.patch()
@app.trace()

데코레이터에 직접 메서드를 지정해준다는 것이 차이점입니다.

profile
Unicorn Developer

0개의 댓글