2023. 8. 5. 15:31ㆍBackend(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)
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)
모든 데이터 검증을 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 |