You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI中创建多段路径并合理拆分路由模块?

FastAPI 多段嵌套路径的最佳实践

你的想法完全不是想多了,将子资源(比如这里的accounts)的路由拆到独立模块是FastAPI项目中维护嵌套路径的最佳实践,尤其适合中大型项目,能大幅提升代码的可维护性和可读性。

具体实现方式

我们可以通过APIRouter的嵌套挂载来实现这种多段路径,步骤如下:

  1. 创建独立的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}
    
  2. 在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")
    
  3. 在主应用中挂载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:30:32