fastapi自带swagger文档如何嵌套展示?

swagger展示目标效果

  • 后台管理

    • 用户管理

      • a接口
      • b接口
    • 文章管理

      • c接口
      • d接口

现在效果

  • 后台管理

    • a接口
    • b接口
    • c接口
    • d接口
  • 用户管理

    • a接口
    • b接口
  • 文章管理

    • c接口
    • d接口

代码

routerAdmin = APIRouter(
    prefix='/admin',
    tags=['后台管理']
)

# routerUser文件a,b路由
routerAdmin.include_router(routerUser)
# routerAdmin文件c,d路由
routerAdmin.include_router(routerArticle)
app = FastAPI()

app.include_router(routerAdmin)

问: 可以实现目标效果吗,如何实现.

阅读 1.6k
avatarAI BotBETA

可以,您可以通过自定义 Swagger/OpenAPI 文档的生成来实现目标效果。

FastAPI 使用 fastapi_openapi 包来生成 OpenAPI 文档,您可以通过自定义该包来达到目标效果。

首先,您需要安装 fastapi_openapi3 包,而不是默认的 fastapi_openapi。这可以通过以下命令完成:

pip install fastapi_openapi3

然后,您需要创建一个新的文件,例如 openapi.yaml,并定义您的 OpenAPI 文档。这将需要包括您想要显示的自定义标签和路由。然后,您可以创建一个 TagObject 对象,该对象将用于定义标签。在您的 TagObject 中,您可以添加一个 children 属性,该属性将包含您的子标签和路由。

例如:

from fastapi import FastAPI, Depends, HTTPException, status, Tag, Security, Form
from fastapi_openapi import FastAPIOpenAPI
from fastapi_openapi.auto_tag import AutoTag

app = FastAPI()

openapi = FastAPIOpenAPI(title="Your App", version="0.1.0", openapi_version="3.0.2")
openapi.add_tag(name="后台管理", description="后台管理相关接口", children=[
    AutoTag(name="用户管理", description="用户管理相关接口", children=[
        routerUser,  # 注意:这里应该是你的用户管理路由
    ]),
    AutoTag(name="文章管理", description="文章管理相关接口", children=[
        routerArticle,  # 注意:这里应该是你的文章管理路由
    ]),
])

最后,您需要在您的应用中包含 openapi

app.include_router(openapi)

然后,您的 Swagger/OpenAPI 文档应该显示您期望的嵌套标签和路由。注意,上述代码只是一个基本的例子,您可能需要根据自己的路由设置进行一些调整。

2 个回答

目前 OpenAPI 规范不支持嵌套。

2017 年有这个 issue 请求。据开发人员说会实现这个功能,但是目前已经 2023 年了,依然没动静。

貌似有个 插件 能实现:标题1|标题2|标题3。

参考自:stackoverflow

新手上路,请多包涵

FastAPI 集成的swagger不支持嵌套。
不过你可以通过其他工具来实现,之前我用过redoc(https://github.com/Redocly/redoc)来生成API 的文档
可以支持切换swagger,可导出OpenAPI标准格式的文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题