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

OpenAPI 3单YAML文件如何按URI拆分Swagger UI接口分组

完全可以实现,效果和你之前用Springfox配置出来的分组下拉选择完全一致,也不会占用你已经用于接口内部分类的tags字段,完全适配你当前用OpenAPI 3 YAML编写规范、gradle-swagger-generator-plugin生成文档的场景。

实现逻辑和Springfox的思路本质相同:按URI规则把接口拆成多份独立的OpenAPI描述文件,再让Swagger UI加载多份描述文件,自动渲染顶部的分组下拉菜单。你不需要手动维护多份YAML文件,所用的gradle-swagger-generator-plugin本身就原生支持这个能力,配置步骤如下:

配置步骤

直接在项目的build.gradle中添加对应配置即可:

// 指向你日常维护的单份OpenAPI YAML主文件
resolveOpenAPI {
    inputFile = file("src/main/resources/openapi.yaml")
}

generateSwaggerUI {
    // 配置按路径规则自动拆分独立的接口描述文件
    specMerging {
        // 第一个分组:匹配所有/api/v1/something前缀的接口
        create("SomeGroup") {
            outputFile = file("${buildDir}/swagger/some-group.json")
            pathFilter = { it.startsWith("/api/v1/something") }
        }
        // 第二个分组:匹配/api/v1/前缀下、不属于上面分组的其余接口
        create("SomeOtherGroup") {
            outputFile = file("${buildDir}/swagger/some-other-group.json")
            pathFilter = { it.startsWith("/api/v1/") && !it.startsWith("/api/v1/something") }
        }
    }

    // 配置Swagger UI的下拉分组列表
    swaggerUI {
        urls = [
            [name: "SomeGroup", url: "some-group.json"],
            [name: "SomeOtherGroup", url: "some-other-group.json"]
        ]
        // 可选:指定页面默认加载展示的分组
        urlsPrimaryName = "SomeOtherGroup"
    }
}

注意点

  • 你全程只需要维护一份完整的OpenAPI YAML文件即可,构建阶段插件会自动按配置的路径规则拆出两份独立的接口描述,公共的schema、参数、响应定义不需要重复编写
  • 现有tags配置不需要做任何改动,标签只在单个分组内部承担接口分类的作用,和顶层的spec分组逻辑完全不冲突
  • 构建完成后生成的Swagger UI页面,顶部会出现和你之前用Springfox实现效果完全一致的分组下拉选择器,切换时仅展示对应分组下的接口,和你给出的示例效果没有区别

如果你不想用插件的自动拆分能力,也可以手动维护两份独立的OpenAPI YAML文件,直接把两个文件的访问地址配置到swaggerUI.urls参数里,最终展示效果是一样的,只是手动维护多份文件很容易出现公共定义不同步的问题,更推荐用插件自动拆分的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:39:31