FastAPI(planner 코드리뷰 src.routes.events)

2025. 5. 2. 13:31고급 웹프로그래밍

코드 리뷰

from fastapi import APIRouter # 라우팅을 모듈화 하기 위해 사용하는 클래스
from src.models.events import Event, EventUpdate
from src.database.connection import Database

event_router = APIRouter( 
    prefix ="/events",
    tags=["Events"]
    )

event_db = Database(Event) # 다른 모듈에서 정의한 함수와 인자 (models.events.py, database.connection.py)

@event_router.get("/", response_model=list[EVENT]) # 이 API(메뉴판)를 서버가(응답) 리스트의 형태로 데이터를 반환
async def get_all_events():
    evnents = await event_db.get_all() # models.events에서 정의한 메서드를 받아서 사용
    return events

@event_router.get("/{id}") # GET /events/{id} 로 요청을 받는다
async def get_event(id:int): # id를 인자로 받으며 타입은 int
    event = await event_db.get(id) # models.events에서 정의 한 메서드
    return event

@evnet_router.post("/"): # POST /events
async def create_event(event: Event):
    await event_db.save(event)
    return {"message": "이벤트가 생성되었습니다."}

@event_router.delete("/{id}") # DELETE /events/{id}
async def delete_event(id: int):
    await event_db.delete(id)
    return {"message": "이벤트를 삭제했다."}

@event_router.put("/{id}")  # PUT/events/{id}
async def update_event(id: int, event: EventUpdate):
    await event_db.update(id, event)
    return {"message": "이벤트를 업데이트함."}

용어 설명

  • APIRouter: 여러 API 경로를 하나의 그룹처럼 묶고 이를 app.include_route()로 메인 앱에 등록할 수 있게 해주는 도구
    • Swagger UI나 postman에서 해당 경로 입력하면 해당 함수의 return 값이 뜨게 만듬
  • prefix: 위 코드에서 /events로 적었으므로 그 아래 @event_router.get("/")라고 적어도 자동으로 GET / 이 아닌 GET /evnents 라고 인식하는 것임, 즉 공통 접두어를 한 번에 지정
  • tags: Swagger 문서에서 경로를 "그룹"으로 정리
  • resoponse_model = list[] : 여러 개의 객체 반환
    class Event(Document):
      id: int
      title: str
    가 있다고 하면
    [
    {
      "id": 1
      title: "test"
    }
    ]
    이런식으로 응답이 온다
반응형

'고급 웹프로그래밍' 카테고리의 다른 글

FastAPI(planner 코드 리뷰 models.events)  (0) 2025.05.02
FastAPI(planner 코드리뷰 src.routes.users)  (0) 2025.05.02
FastAPI(planner 코드 리뷰 src.main)  (0) 2025.04.30
MongoDB 연동하기  (0) 2025.04.30
MongoDB  (0) 2025.04.30