如何在FastAPI中创建多段路径并合理拆分路由模块?
FastAPI 多段嵌套路径的最佳实践
你的想法完全不是想多了,将子资源(比如这里的accounts)的路由拆到独立模块是FastAPI项目中维护嵌套路径的最佳实践,尤其适合中大型项目,能大幅提升代码的可维护性和可读性。
具体实现方式
我们可以通过APIRouter的嵌套挂载来实现这种多段路径,步骤如下:
创建独立的accounts路由模块
新建routers/accounts.py,专注处理账户相关的路由逻辑,这里不需要提前写死父路径(/api/people/{person_id}),只需要定义子路径部分:from fastapi import APIRouter router = APIRouter() # 获取指定用户的指定账户 @router.get("/{account_id}") def get_person_account(person_id: int, account_id: int): return {"person_id": person_id, "account_id": account_id, "balance": 1000} # 为指定用户创建新账户 @router.post("/") def create_person_account(person_id: int, account_type: str): return {"person_id": person_id, "account_id": 123, "type": account_type}在people模块中挂载accounts路由
在routers/people.py中,定义用户相关路由后,将accounts的路由器挂载到指定前缀下,自动拼接出完整的多段路径:from fastapi import APIRouter from .accounts import router as accounts_router # 定义用户模块的基础路径前缀 router = APIRouter(prefix="/api/people/{person_id}") # 用户自身的路由 @router.get("/") def get_person(person_id: int): return {"person_id": person_id, "name": "John Doe"} # 挂载账户路由,形成 /api/people/{person_id}/accounts/... 的完整路径 router.include_router(accounts_router, prefix="/accounts")在主应用中挂载people路由
最后在main.py中将people模块的路由引入到全局应用:from fastapi import FastAPI from routers.people import router as people_router app = FastAPI() app.include_router(people_router)
为什么这种方式更优
- 职责清晰:用户逻辑和账户逻辑完全分离,每个模块只专注处理自身资源的业务
- 可复用性强:如果后续需要在其他父路径下复用账户路由(比如后台管理的
/admin/people/{person_id}/accounts),直接挂载这个accounts模块即可 - 易于维护:后续修改账户相关逻辑时,只需要操作
accounts.py,不用在用户模块的代码中翻找相关路由
当然,如果你的项目非常小,直接把accounts路由写在people模块里也能运行,但模块化的写法是长期维护的更优选择。
内容的提问来源于stack exchange,提问作者writes_on
相关产品推荐
相关产品推荐

