본문 바로가기
Web/FastAPI

FastAPI vs APIRouter

by 컴돈AI 2023. 12. 20.

 

 

목차

     

     

    FastAPI vs APIRouter

    • FastAPI로 작성된 코드를 살펴보다 보면 다음과 같이 두 가지 방법으로 생성된 인스턴스가 존재합니다.
      • from fastapi import FastAPI
        
        app = FastAPI()
      • from fastapi import APIRouter
        
        router = APIRouter()
    • 그렇다면 이 둘의 차이는 무엇일까요?

    FastAPI

    • FastAPI 클래스는 전체 애플리케이션을 생성하는 데 사용됩니다. 이를 통해 앱 인스턴스를 생성하고, 라우팅, 요청 처리, 응답 반환 등 애플리케이션의 핵심 기능을 정의합니다.
    • 기본적으로 FastAPI 클래스는 애플리케이션의 스켈레톤을 제공하며, 전체 API 서버를 나타냅니다.

    APIRouter

    • APIRouter는 애플리케이션 내의 특정 경로나 서비스 그룹을 모듈화 하는 데 사용됩니다.
    • 이를 통해 애플리케이션의 다양한 부분을 분리하여, 각 부분을 별도의 라우터로 관리할 수 있습니다.
      • 예를 들어, 사용자 관련 경로와 제품 관련 경로를 다른 APIRouter 인스턴스로 분리하여 관리할 수 있습니다.
    • 굳이 APIRouter를 사용하지 않고 코드를 작성해도 상관없습니다. 하지만 APIRouter를 사용하면 코드의 가독성과 유지 관리를 향상시키며, 대규모 애플리케이션의 구조를 더욱 명확하게 정의하는데 도움이 됩니다.

    FastAPI와 APIRouter 사용 예시

    • 먼저 APIRouter들은 routers 폴더 안에서 각각의 기능 별로 파일을 분리해서 관리할 수 있습니다.
      • routers/users.py
        • from fastapi import APIRouter
          
          users = APIRouter(prefix="/users")
          
          
          @users.get("/", tags=["users"])
          async def root_users():
              return {"message": "root_users"}
          
          
          @users.get("/num", tags=["users"])
          async def users_num():
              return {"message": "users_num"}
      • routers/items.py
        • from fastapi import APIRouter
          
          items = APIRouter(prefix="/items")
          
          
          @items.get("/", tags=["items"])
          async def root_items():
              return {"message": "root_items"}
          
          
          @items.get("/num", tags=["items"])
          async def items_num():
              return {"message": "items_num"}
    • 이제 정의한 APIRouter들을 FastAPI에 포함시켜서 전체 애플리케이션을 구성할 수 있습니다.
      • run.py
        • from fastapi import FastAPI
          import uvicorn
          
          from routers.users import users
          from routers.items import items
          
          app = FastAPI()
          
          app.include_router(users)
          app.include_router(items)
          
          
          @app.get("/")
          def home():
              return {"message": "main"}
          
          
          if __name__ == "__main__":
              uvicorn.run("run:app", host="localhost", port=8000, reload=True)
    • 이런 식으로 기능별로 router를 분리하게 되면 가독성도 좋아지고, 관리하기도 쉬워집니다.

     

     

     

    'Web > FastAPI' 카테고리의 다른 글

    FastAPI 기초  (0) 2023.12.19
    FastAPI 이론  (0) 2023.12.19
    Visual Studio Code Python 초기 설정 (가상환경, Linter, Formatter, pip, .gitignore)  (0) 2023.12.15