FastAPI
FastAPI는 처음 Django를 공부할 때 우연히 보게 되었던 프레임워크였다. 그 때는 관련글도 별로 없고 사용하는 곳들도 거의 없었는데, 요근래 찾아보니 FastAPI를 사용하는 곳이 많은 것 같아 놀랐다. 약간 Django는 백오피스(admin)쪽에 사용하면서 FastAPI로 rest api를 구현하는 경우가 있는 것 같고... 프렘웤 하나만 사용하지 않고 3개를 모두 사용하는 것 같다. (FastAPI + Django + Flask)
Fast를 찾아봤을 때 인상 깊은 것은 빠르다는 점. 그리고 type hint를 사용한다는 점. python의 경우 타입이 없어 단점으로 언급이 많이 되는데.. python 3.5부터 type hint가 추가 되었다. (아래 코드 참고)
def sum(a: int, b: int) -> int:
return a + b
이제 공식 문서를 참고하여 테스트 앱을 하나 만들어 보려고 한다.
fastapi 설치
pip install fastapi
ASGI 서버 설치
pip install uvicorn[standard]
코드 작성
from typing import Optional
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: Optional[str] = None):
return {"item_id": item_id, "q": q}
uvicorn main:app --reload
브라우저로 http://127.0.0.1:8000/items/5?q=somequery 로 접속 시 아래 json 응답을 확인 할 수 있다.
{"item_id": 5, "q": "somequery"}
http://127.0.0.1/docs 로 접속 시 API 문서 확인이 가능하다.
예제 심화 코드 작성
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}