사진에서 번개, 이름에 들어가는 Fast 뭔가 빠른 느낌이 나네요.....
Fast : 굉장히 빠른 퍼포먼스
Fast to code : 대략 200에서 300%정도 개발하는 속도를 향상시킴
Fewer bugs : 대략 40%정도의 에러를 감소시킴
Intuitive : 에디터 지원이 좋음. 디버깅하는데 속도를 줄여주고 어디든 완성되어있음.
Easy : 사용하고 배우기 편하게 디자인 되어있음. docs를 읽는 시간을 줄여줌
Short : 코드의 반복을 최소화함.
Robust : 프로덕션 단계 준비가 된 코드. 자동으로 문서를 생성해줌
Standards-based : API를 위한 오픈 스탠다드를 기준으로 함
어떤블로그에 공식문서 번역본이 있어 가지고 왔습니다.(참고)
fastAPI에 들어가기전에 파이썬 의존성 관리자는 poetry를 사용하도록 하겠습니다.(의존성 관리자라고 해서 어렵게 느껴지지만 자바스크립트로 따지면 npm, yarn 라고 생각하시면 됩니다.)
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
설치 후 터미널 창에 poetry init
이라고 친 다음 설정항목이 뜨는데 기호에 맞게 설정하고, 그 후에 pyproject.toml
이라는 파일이 생겼다.(package.json과 비슷한 폴더 인듯)
poetry add fastapi uvicorn
FastAPI, uvicorn을 설치 한다. 설치를 하면 poetry.lock 파일이 생기는데 같은 의존성을 설치할 수 있도록 보장 해주는걸로 알고 있다.(npm의 package.lock.json과 비슷한 느낌)
from typing import Optional # 타입 힌팅
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel): # 객체를 typing(타입정의) 할때는 BaseModel를 상속받아 정의
name: str
price: float
is_offer: Optional[bool] = None
@app.get('/') # '/' get 요청이 온다면 응답값으로 "Hello World"를 반환
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}
# endpoint /items/이부분은 정해지지 않은값 => ex) 1,2,3,4,5 어떤값이 와도 됨
# 단 밑에서 보면 타입을 int로 제한을 두었기때문에 int형 자료형만 와야됨
# Optional은 이 변수가 있을 수도 있고, 없을 수도 있다라는 옵션널 한 값이다 라는것을 명시
# ex) /items/2 => {"item_id": 2, "q": null}
# ex) /items/2?q=apple => {"item_id": 2, "q": apple}
# '/' == http://localhost:8000
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
@app.post("/items/add")
def add_item(item: Item):
print(item)
return {"success": True}
# body(payload값)는 함수의 파라미터 값으로 받는다.
공식문서에서는 http://127.0.0.1:8000/docs 로 api Test를 하고 있지만 나는 Postman으로 동작Test
FROM tiangolo/uvicorn-gunicorn:python3.7
# Install Poetry
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \
cd /usr/local/bin && \
ln -s /opt/poetry/bin/poetry && \
poetry config virtualenvs.create false
WORKDIR /app
COPY ./pyproject.toml ./poetry.lock* /app/
# install dependencies
RUN poetry install --no-root --no-dev
COPY ./ /app
CMD ["uvicorn", "main:app", "--reload", "--host=0.0.0.0", "--port=8000"]
docker build -t fast_api ./
빌드 후 docker run -d -p 8000:8000
컨테이너를 실행