Python

[FastAPI] APIRouter - 모듈 분리

비번변경 2024. 12. 16. 18:01

개요

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/tutorial/bigger-applications/?h=apirouter#another-module-with-apirouter

https://fastapi.tiangolo.com/ko/reference/apirouter/?h=apirouter#fastapi.APIRouter--example

https://lsjsj92.tistory.com/651