fastapi 찍먹 1편

2023. 8. 5. 15:31Backend(Python)/Fast API

✅ 아래 내용들에 대해서 알아보자

- FastAPI란
- FastAPI 설치 및 간단 실습
- 정리

 

 

FastAPI란

 FastAPI는 python 3.6 이상 버전의 API를 빌드하기 위한 웹 프레임워크이다.

 

FastAPI 특징

  • Starlette와 Pydantic 덕분에 높은 매우 높은 성능을 보여준다.
  • 배우기 쉽고 공식문서가 잘되어 있어서 러닝 커브가 낮다
  • API에 대해 swagger와 오픈 API를 관리할 수 있도록 자동으로 제공해 준다.(따로 스웨거 세팅 필요 없음!)
  • 내부에 Pydantic을 사용하여 유효성 검증을 자동으로 해준다.
  • 복잡한 사용자 인증 시스템, DB 연결 등 지원
  • 효율적인 테스트 코드 환경 제공

 

fastapi 공식문서를 보면서 fastapi 찍먹을 해보자.

 

 

FastAPI 설치

python 버전이 2일 경우

pip install "fastapi [all]"
pip install uvicorn  -> 서버 역할을 하는 uvicorn 설치

 

 

python 버전이 3일 경우

pip3 install "fastapi [all]"
pip3 install uvicorn

 

만약 두 개 설치 시 오류가 발생하면 sudo 권한으로 설치를 하면 잘된다!

 

fastapi 설치 완료 후 아래 코드를 입력 후 uvicorn을 실행시켜 보자!

uvicorn 파이썬 모듈명:Fast API 오브젝트 명 -- reload(옵션) (ex. uvicorn main:app --reload)

 

간단한 예시코드

 

실행결과

실행 결과

 

 

api 통신이 잘되는 것을 확인할 수 있다.

swagger를 통해서 보고 싶으면 따로 스웨거 설정 없이 바로 접속가능하다! 아주 편함..

(http://127.0.0.1:8000/docs, http://127.0.0.1:8000/redoc)

 

 

swagger

 

 

api가 매개변수와 타입이 있는 경우에 대해서 알아보자.

from fastapi import FastAPI
from enum import Enum

#서버 실행 방법
#uvicorn main:app --reload
# main : main.py(파이썬 모듈)
# :app : main.py 내부의 app=FastAPI() 줄에서 생성한 오브젝트
# --reload : 코드 변경 후 서버 재시작. 개발서버에서만 사용

# enum 클래스
class ModelName(str, Enum):
    alexnet= "alexnet"
    resnet ="resnet"
    lenet ="lenet"

app = FastAPI()

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

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}


@app.get("/models/{model_name}")
async def get_model(model_name:ModelName):
    # 열거형 비교
    if model_name is ModelName.alexnet:
        return {"model_name": model_name, "msg" : "deep learning ftw!"}
    
    # 열거형 값 가져오기
    if model_name.value == 'lenet':
        return {"model_name": model_name, "msg" : "LeCNN all the images"}

    return {"model_name": model_name, "msg" : "Have some residuals"}


# 동일한 파라미터의 형식을 가진 두 api가 있을 경우 순서를 먼저 선언해야 한다
# 아래 두 api의 경우 localhost:8080/users/me를 호출할 경우 아래 /users/me가 먼저 호출됨

@app.get("/users/me")
async def read_user_me():
    return {"user_id","the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

 

위 코드를 보면 read_item, get_model 메서드가 파라미터와 타입이 있는 api이다.

해당 api에 대해 잘못된 요청을 해보자.

 

read_item 메서드의 파라미터는 int값인데 api 요청 시 string값으로 보내고 있다(dsd)

 

read_item api 호출

 

모든 데이터 검증을 Pydantic을 통해 내부적으로 수행되므로 따로 Validation을 위한 코드가 필요 없고 굉장히 간편하다!!

(자프링을 이용해서 백엔드 업무를 해왔었는데 fastapi 써보니 확실히 편하고 기능을 다 제공해서 간편하다는 것을 엄청 느낌)

 

그리고 파이썬 3.4 이후 버전부터 Enums를 사용가능하다. (from enum import Enum, 위 코드의 class ModelName 참고)

 

 

정리

FastAPI를 사용하면 다음과 같은 기능들을 그저 한 번의 선언만으로 간단하게 사용할 수 있게 된다는 큰 장점이 있음

  • 오류 검사, 자동 완성 가능
  • 데이터 파싱 가능
  • 데이터 검증 
  • API 주석과 자동 문서

 


참고 내용

반응형

'Backend(Python) > Fast API' 카테고리의 다른 글

FastAPI 찍먹 3편  (0) 2023.08.11
fastapi 찍먹 2편  (0) 2023.08.07
파이썬 프레임워크 고민이 된다면..  (0) 2023.07.29