목차
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"}
-
- routers/users.py
- 이제 정의한 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)
-
- run.py
- 이런 식으로 기능별로 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 |