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")
...
如果没有主路由器中的标记
参数,您将只获得字段
、模型数据
和模型
部分,没有任何重复项