개요
FastAPI 공식 문서를 보면 하나의 파일에 경로를 구성하게끔 되어있는데, 사실 애플리케이션을 개발할 때 하나의 파일에 모든 내용을 넣을 수 있는 경우는 거의 없다. FastAPI는 모듈 분리를 할 수 있도록 APIRouter라는 기능을 제공하는데, 이번 글에서는 관련 내용을 정리해 둔다.
APIRouter 정의
APIRouter는 경로를 그룹화하는 데 사용하며, 애플리케이션을 구조화할 수 있게 하는 역할을 한다. 일종의 작은 FastAPI 객체라고 생각해도 된다.
사용할 때는 APIRouter 클래스를 임포트 한 뒤, APIRouter 객체를 생성하고, FastAPI 객체에 대한 경로를 데코레이터로 추가했던 것과 동일한 방식으로 APIRouter 객체에 대한 경로를 데코레이터로 추가한다.
아래는 예시 코드(users.py)이다.
# users.py
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Rick"}, {"username": "Morty"}]
이후 메인 FastAPI 진입 모듈에서 import 하여 사용하게 된다.
APIRouter 사용
다른 모듈에서 선언한 APIRouter는 다른 모듈에서 추가하여 사용할 수 있다.
사용하는 방식은 정의한 모듈을 임포트 하고, FastAPI.include_router 함수에 모듈에서 선언한 APIRouter 객체를 전달하여 추가한다.
import users
from fastapi import FastAPI
app = FastAPI()
app.include_router(users.router)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
이제 FastAPI 애플리케이션을 시작하고 API 문서를 확인해 보면,
마치 하나의 파일을 작성한 것처럼 경로가 잘 인식되는 것을 볼 수 있다.
참고 문서
https://fastapi.tiangolo.com/ko/reference/apirouter/?h=apirouter#fastapi.APIRouter--example