如何根据所选服务器修改OpenAPI规范中的链接值?
自动切换Swagger UI中Markdown文档链接的方案
针对你提到的根据选中服务器自动切换文档链接路径的需求,有两种可行的实现方式,其中自定义Swagger UI脚本的方式最直接有效:
方案一:利用Swagger UI事件监听动态修改链接
Swagger UI提供了serverChange事件,可监听服务器切换操作,然后动态修改页面中Markdown链接的路径。具体步骤如下:
修改Swagger UI初始化代码,添加事件监听逻辑:
const ui = SwaggerUIBundle({ url: "/path/to/your/openapi-spec.yaml", dom_id: '#swagger-ui', // 保留其他原有配置 }); // 处理链接切换的通用函数 function updateDocLinks(serverUrl) { const markdownLinks = document.querySelectorAll('.markdown a'); markdownLinks.forEach(link => { // 保存原始链接,避免重复修改 if (!link.dataset.originalHref) { link.dataset.originalHref = link.getAttribute('href'); } const originalHref = link.dataset.originalHref; let newHref; if (serverUrl.includes('/stuff/api/v1')) { // 生产环境:添加../foo前缀 newHref = `../foo/${originalHref}`; } else { // 测试环境:使用原始路径 newHref = originalHref; } link.setAttribute('href', newHref); }); } // 监听服务器切换事件 ui.on('serverChange', (server) => { updateDocLinks(server.url); }); // 页面初始化时执行一次,适配默认选中的服务器 ui.initOAuth().then(() => { const selectedServer = ui.getState().servers.selected; if (selectedServer) { updateDocLinks(selectedServer.url); } });OpenAPI中的Markdown链接保持统一写法:
直接使用测试环境的相对路径即可,比如:[Something](relative/path/thing.txt)脚本会在切换到生产服务器时自动为链接添加
../foo/前缀。
方案二:通过服务器变量统一路径前缀(可选)
如果希望在OpenAPI层面统一管理路径差异,可以先修改服务器定义,将路径前缀抽为变量:
servers: - url: /{basePath}/api/v1 description: Production variables: basePath: default: stuff enum: ["stuff", ""] description: API基础路径 - url: /api/v1 description: Test
之后结合Swagger UI的脚本,根据basePath变量值来调整文档链接路径,逻辑和方案一类似,只是判断条件改为检查变量值而非完整URL。
内容的提问来源于stack exchange,提问作者akagixxer
相关产品推荐
相关产品推荐

