FastAPI로 REST API 만들기
1. 초기 세팅
저는 pycham 2021.2.3을 사용해 FastAPI로 RESTAPI를 만들어 볼 예정입니다.
참고로 파이썬은 3.9버전을 사용하고 있습니다 :)
최근 업데이트 이후 파이참에서도 손 쉽게 FastAPI 프로젝트를 실행할 수 있지만 저는 알려드리기 위해 빈 프로젝트에서 한 번 실행 하도록 하겠습니다.
위와 같은 main.py가 생성이 되고 hi라는 말과 함께 이상한 코드들이 보일 겁니다.
이걸 먼저 지워주겠습니다.
그 다음으로 현재 어떤 라이브러리가 가상환경에 구성이 되어 있는지 확인해보고 필요한 것들을 하나씩 추가 해보도록 하겠습니다.
# 설치된 라이브러리 목록 확인 법
pip list
그 다음으로 FastAPI와 웹서버를 열 uvicorn을 설치해줍니다.
그 다음 다시 pip list로 확인하여 라이브러리가 정상적으로 설치가 되었나 확인해줍니다.
# 우리가 설치해야 하는 파이썬 라이브러리
# 우리가 사용할 웹프레임 워크
pip install fastapi
# 우리가 사용할 웹서버
pip install uvicorn
설치가 완료가 되었다면 이제 한 번 나만의 웹서버를 열어볼 차례입니다.
main.py에 이와 같은 코드를 한 번 작성해 봅시다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def first():
hi = '안녕하세요'
return hi
그럼 이제 웹서버를 열어볼 차례입니다.
아래와 같은 코드를 터미널 창을 열어 한 번 실행 시켜봅시다.
uvicorn main:app --reload
그럼 아래와 같은 글자들이 터미널에 찍히고 웹서버가 열리게 됩니다.
그 다음 우리는 이제 요청을 보내면 정상적으로 확인이 되는지 확인해보겠습니다.
만약 정상적으로 요청이 들어왔다면 200 OK를 보여주면서 "안녕하세요"가 나올 것이고 아니라면 404 Not Found가 나타납니다.
지금 우리는 FastAPI를 통해 GET으로 데이터를 조회하는 API를 완성시켰습니다.
그럼 여기서 조금 더 나아가 POST로 데이터를 BODY에 넣어 보내볼까요?
@app.get만 있는 코드에 @app.post라는 친구도 하나 만들어서 같이 넣어보겠습니다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name : str
number : int
@app.post("/")
async def first_post(item : Item):
return item
@app.get("/")
async def first():
hi = '안녕하세요'
return hi
일단 어떻게 작동하는지 모르겠으니 다시 한 번 웹서버를 열어 확인해보겠습니다.
어? 우리는 분명 똑같은 url에 GET이랑 POST도 같이 넣어서 해봤는데 GET만 나왔습니다.
혹시 url가 똑같아서 그런가 싶어 한 번 url을 바꿔서 재실행 시켜 보겠습니다.
405 Method Not Allowed 메소드가 일치하지 않다는 오류와 함께 GET으로 받아드려집니다.
왜 이러한 상황이 생겼는지 자세히 알고 싶으신 분들은 아래 글을 함께 읽어보시면 도움이 되실 겁니다.
아무튼 이러한 상황을 해결하기 위해서 FastAPI는 정말 고맙게도 Swagger라는 API 플랫폼을 지원합니다.
이러한 Swagger에 접속을 하기 위해서는 /docs만 치게 된다면 아래와 같이 나오게 됩니다.
좋습니다!
이제 POST로 한 번 요청을 보내보겠습니다.
Response Body에 집어넣은 그대로 응답이 돌아왔습니다.
위와 같이 FastAPI에서는 쉽게 테스트를 할 수 있도록 Swagger를 지원해줄 뿐만 아니라 Redoc도 지원합니다 :)
정리를 해보자면
FastAPI는 단 5줄로 웹서버를 열수 있다.
Swagger, Redoc를 사용함으로 쉽게 테스트를 할 수 있다.
uvicorn을 사용해 속도가 엄청나게 빠르다.
다음 시간에는 SQLAlchemy를 연동해서 사용해 보도록 하겠습니다.
그럼 다음시간에 만나요!
참조
'Dev DBAN > 개발 이야기' 카테고리의 다른 글
FAST API로 REST API만들기 - APIRouter (0) | 2022.01.18 |
---|---|
FAST API로 REST API만들기 - SQLAlchemy (4) | 2021.12.13 |
FastAPI로 REST API 만들기 - 도입부 (0) | 2021.11.23 |
스타트업 코딩테스트 후기 (0) | 2021.11.03 |
REST API? REST API! (0) | 2021.10.29 |
댓글