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

如何在OpenAPI中仅基于Host(不含端口)动态配置Server?

问题解决:Swagger UI中动态设置API服务器URL(仅保留IP,去掉端口)

核心结论

OpenAPI规范没有内置仅返回IP的{HOST}或提取端口的{PORT}变量,无法直接通过OpenAPI的Server变量实现需求。以下是几种可行的解决方案:

方案1:修改Swagger UI初始化配置(推荐)

针对Swagger UI的Standalone模式,可通过自定义JS代码动态剥离当前页面URL的端口,替换为目标API的正确地址:

在生成的Standalone页面中,找到Swagger UI初始化代码块,添加如下逻辑:

// 提取当前页面的主机IP(不含端口)
const targetHost = window.location.hostname;
// API基础路径
const apiBase = "/x.y.z";

// 初始化Swagger UI并修改服务器配置
window.ui = SwaggerUIBundle({
  url: "openapi.json",
  dom_id: '#swagger-ui',
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  plugins: [
    SwaggerUIBundle.plugins.DownloadUrl
  ],
  onComplete: function() {
    // 替换Server列表为正确的API地址
    window.ui.spec.servers = [{ url: `${targetHost}${apiBase}` }];
    // 刷新UI生效
    window.ui.updateSpec(window.ui.spec);
  }
});

页面加载后会自动将服务器URL设置为10.0.0.10/x.y.z,避免带上Swagger服务的端口。

方案2:自定义OpenAPI变量并动态赋值

通过自定义变量实现灵活配置,同时支持动态获取IP:

  1. 修改openapi.json的Server配置:
"servers": [
  {
    "url": "{apiHost}/x.y.z",
    "variables": {
      "apiHost": {
        "default": "10.0.0.10",
        "description": "API服务器IP地址"
      }
    }
  }
]
  1. 在Swagger UI初始化时传递变量值:
window.ui = SwaggerUIBundle({
  url: "openapi.json",
  dom_id: '#swagger-ui',
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  // 动态传递当前页面的IP作为变量值
  variables: {
    "apiHost": window.location.hostname
  }
});

这种方式既保留了配置灵活性,也能自动适配当前环境的IP。

方案3:硬编码固定API地址(简单直接)

如果API服务器IP固定不变,直接在openapi.json中写死完整URL即可:

"servers": [
  {
    "url": "10.0.0.10/x.y.z"
  }
]

无需额外配置,但缺乏动态性,适合IP长期固定的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:24:27