-
FastAPI 로 router 구현하기Backend/FastAPI 2023. 6. 26. 21:38
필자는 mvc 패턴 구조를 기반으로 할 때, 동일한 이름의 파일명으로 통일해준다.
(오른쪽 그림 참고)
<간략한 구조 설명 >
만약 food.py 중 하나의 API를 수정해야 한다고 가정하자. 이때, response model 의 타입 변경을 위해서 model속 food.py만 수정하면 되는 편리함(?) 이 있다. -> 유지 보수 편리!
-> 특히, 서로 서로 참고할 때(from model import food 와 같이 가독성 및 이해하기 쉬움 )
그리고, router속의 여러가지 api들은 api.py 에 묶어서 main.py의 미들웨어에서 사용 예정이다!
본격적으로 API를 하나 만들어 보자!
(보통, 화면 설계서를 바탕으로 API 명세서를 작성 후 API를 만든다!)
1. query string 을 사용 할 때
# router 속의 food.py에서 작성됨from fastapi import APIRouter, HTTPException, statusfrom typing import Union, List, Dictfrom common.exception import *
from controller import food as ctrl_food
from model import food
router = APIRouter()
@router.get('/{name}')def get_name(name:str):return {'Introduce': f"Hi, my name is {name}"}위를 실행 후, 127.0.0.1:8000/docs에서 확인 올바르게 만들었는지 확인 가능
(그 전에 try it out 꼭 클릭하기)
그리고 name에 sue를 넣어주고 200 ok를 받으면
아래와 같은 결과를 볼 수 있다!
2. request body를 사용할 때
# router 부분@router.post('/define', response_model=Dict[str, food.Define_Item])def define_item(request:food.Define_Item):data = ctrl_food.define_item(**request.dict())return {'data': data}# model 부분 -> food.py
from typing import List, Set, Unionfrom pydantic import BaseModel
class Define_Item(BaseModel):req_id : Union[str, None] = Nonepw : Union[str, None] = None# controller 부분 => food.py
from typing import Listfrom loguru import loggerfrom common.utils import *
import random
def define_item(req_id:str, pw:str):dicted_item = {'req_id' : req_id,'pw': pw}data = dicted_item
return data
위와 같이 만든 후, - > docs 에서 body에 들어갈 임의의 값 넣어주고, 형이 맞으면지금 처럼 200 이면서 형태와 알맞은 상태의 결과값을 반환함 !
이렇게 test용 router를 구현하면서 각각 controller, model을 사용해보았다.
그 외 조금 다양한 전처리 방식과 빅쿼리 연결 방법도 포스팅 예정!
'Backend > FastAPI' 카테고리의 다른 글
FastAPI에서 DB Connection-mysql 연결하기 (0) 2023.09.21 FastAPI에서 빅쿼리 호출 및 전처리까지 (0) 2023.06.27 FastAPI - main.py 구성하기 (0) 2023.06.26 FastAPI에서 handling error - exception 정의 및 적용 (0) 2023.06.26 Poetry를 이용하여 FastAPI 구현하기 - 3 (0) 2023.06.26