본문 바로가기
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