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

FastAPI生成的Swagger文档未替换路径参数占位符问题排查

问题原因与解决方案

问题根源

你遇到的是FastAPI 0.101.1版本的兼容性问题:当APIRouter的前缀包含路径参数(如user/{user_id}),同时路由自身又定义了路径参数(如/post/{post_id})时,Swagger UI无法正确识别并填充两个路径参数,只会替换其中一个,另一个保留为URL编码的占位符。

另外你的代码存在笔误:返回语句中的company_id未在函数参数中定义,应该改为user_id,否则运行时会抛出NameError。

解决方案

针对当前版本,有两种可行的解决方式:

方案1:移除APIRouter前缀中的路径参数

将所有路径参数统一放在路由装饰器的路径中,避免前缀包含参数:

from fastapi import APIRouter

api_router = APIRouter()

@api_router.put("/user/{user_id}/post/{post_id}")
def module_deep_clone(
        user_id: int,
        post_id: int,
):
    return {"post_id": post_id, "user_id": user_id}

这种方式下,Swagger UI能正常识别两个路径参数,输入值会正确替换占位符。

方案2:显式使用Path标记路径参数

通过Path类显式声明所有路径参数,让FastAPI更精准地生成OpenAPI文档,确保Swagger UI能正确解析:

from fastapi import APIRouter, Path

api_router = APIRouter(prefix="user/{user_id}")

@api_router.put("/post/{post_id}")
def module_deep_clone(
        user_id: int = Path(...),
        post_id: int = Path(...),
):
    return {"post_id": post_id, "user_id": user_id}

显式的参数声明会让OpenAPI文档中参数的定义更清晰,Swagger UI就能正确填充两个路径参数的值。

额外建议

如果条件允许,升级FastAPI到0.104.0及以上版本,这个问题在后续版本中已被官方修复,无需额外修改代码即可正常使用前缀带参数的APIRouter。

内容的提问来源于stack exchange,提问作者user2546783

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:42:36