FastAPI How To
참고
설치
참고 : https://fastapi.tiangolo.com/ko/#_4 (opens in a new tab)
$ cd temp
$ virtualenv first-demo
## 가상환경 활성화
$ source first-demo/Scripts/activate
## fastapi 설치
$ pip install fastapi
$ pip install "uvicorn[standard]"
## 프로젝트 디렉터리 이동
$ cd first-demo/
$ code .
첫 번째 예제
https://fastapi.tiangolo.com/ko/#_6 (opens in a new tab) 의 코드를 복사후 main.py 라는 파일을 만들어서 복사한 내용을 붙여넣어서 저장
from typing import Union
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: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.get("/search")
def query_item(query: str):
return {"your query = " + query}
실행
참고 : https://fastapi.tiangolo.com/ko/#_7 (opens in a new tab)
$ uvicorn main:app --reload
위 명령어는 아래와 같은 의미입니다.
- main.py 라는 파일 내에 선언한 app 을 실행할 거야. 그리고
--reload
옵션을 통해 수정될때마다 재기동해줘
@app
get, post, put, delete 등의 REST API 연산은 아래와 같이 @app
내에 정의된 데코레이션을 통해 정의 가능합니다.
@app.get("/")
@app.get("/items/{item_id}")
@app.post("/items/{item_id}")
@app.put("/items/{item_id}")
@app.delete("/items/{item_id}")
POST, PUT 연산의 차이는 아래와 같습니다.
- POST : 항상 같은 결과값을 보장하지 않는 연산을 수행할 때
- 사용자 추가, 댓글 추가 등과 같은 기존상태에서 추가되어 돌려받는 결과가 달라지는 연산들
- PUT : 항상 같은 결과값이 보장되는 멱등성 연산결과를 보장할 때
- 사용자 정보 수정, 댓글 수정 등과 같이 한번의 요청에 대해 돌려받는 응답의 "형식"이 같을 경우 사용
- 응답본문의 내용은 달라지지만 통신시 주고받는 데이터의 형식(상태코드 등)은 달라지지 않는다.
Path Variable
Path Variable 은 예를 들면 아래와 같이 선언 가능합니다.
main.py
# ...
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
Query Parameter
Query Parameter 는 예를 들면 아래와 같이 선언 가능합니다.
main.py
# ...
@app.get("/search")
def query_item(query: str):
return {"your query = " + query}
API 문서
Swagger 나 Springdoc 같은 API 문서는 http://127.0.0.1:8000/docs (opens in a new tab) 에 접속하면 확인 가능합니다.
EOF
저는 일반적인 개발팀 내부적으로 필요할만한 기능들을 FastAPI 와 ChatGPT 를 기반으로 제공할 수 있도록 하는 in house tool 을 만들기 위해 Fast API 를 오늘 처음 배웠는데요. 혹시라도 이 글을 읽고 계시는 분 들 중 Python 을 주력으로 사용하시려는 분들이라면 더 자세한 내용은 아래의 내용을 확인하시기 바랍니다.