Python FastAPI swaggerUI两次显示嵌套路由

Python FastAPI swaggerUI两次显示嵌套路由,python,swagger-ui,openapi,fastapi,Python,Swagger Ui,Openapi,Fastapi,我在routes/\uuuu init\uuuuuuy.py ## api/routes/__init__.py router = APIRouter() router.include_router(models_router, prefix="/models", tags=["models"]) ... 下面是包含它们的main.py ## main.py from api.routes import router as api_router def

我在
routes/\uuuu init\uuuuuuy.py

## api/routes/__init__.py
router = APIRouter()
router.include_router(models_router, prefix="/models", tags=["models"])
...
下面是包含它们的
main.py

## main.py
from api.routes import router as api_router
def get_app():
    app = FastAPI()
    app.include_router(api_router, prefix = "/api")
    ...

app = get_app() 
现在,在模型路由器中,我还有两条嵌套路由,如下所示:

## api/routes/models.py
router.include_router(
    fields_router, 
    prefix="/{model_id}/fields", 
    tags=["fields"],
    dependencies=[Depends(pre_model_validation)]
)
router.include_router(
    model_data_router, 
    prefix="/{model_id}/data", 
    tags=["model_data"],
    dependencies=[Depends(pre_model_validation)]
)
虽然这是可行的,但当我打开localhost并使用生成的SwaggerUI文档时,它会显示如下内容

:


嵌套端点也出现在
/models
API内部,以及它们各自的
/fields
/model\u data
API中。如何隔离嵌套路由,使其在swagger文档中显示为单独的API,但在
/models
API中保持定义?

如果我理解正确,您希望所有端点都位于根路径
/API/models/
下,但希望swagger文档只显示一次,在相应的“字段”或“模型数据”标签下,同时在“模型”标签下保留以下内容:

  • 获取站点的模型
  • 创建模型
  • 更新内容类型
如果上述情况正确,您可能希望根据需要使用相同的根路径拆分导入,而不是嵌套导入,如下所示:

#api/routes/_uuinit_uuuuuuu.py
路由器=APIRouter()
路由器。包括路由器(
路由器型号,,
prefix=“/models”,
标记=[“模型”]
)
路由器。包括路由器(
野战路由器,
prefix=“/models/{model_id}/fields”,
标记=[“字段”]
)
路由器。包括路由器(
路由器型号,,
prefix=“/models/{model_id}/data”,
标记=[“模型_数据”]
)

可以通过以下结构实现一些变通方法。出于演示目的,所有内容都放在一起:

fields_router = APIRouter()
...

model_data_router = APIRouter()
...

models_router = APIRouter()
...


aggregated_models_router = APIRouter()
aggregated_models_router.include_router(
    fields_router, 
    prefix="/{model_id}/fields", 
    tags=["fields"],
    dependencies=[Depends(pre_model_validation)]
)
aggregated_models_router.include_router(
    model_data_router, 
    prefix="/{model_id}/data", 
    tags=["model_data"],
    dependencies=[Depends(pre_model_validation)]
)
aggregated_models_router.include_router(
    models_router, 
    prefix="", 
    tags=["models"]
)
...

router = APIRouter()
router.include_router(aggregated_models_router, prefix="/models")
...
如果没有主路由器中的
标记
参数,您将只获得
字段
模型数据
模型
部分,没有任何重复项