【问题标题】:best way to tell swaggerui where the host is告诉 swaggerui 主人在哪里的最好方法
【发布时间】:2015-09-04 20:03:09
【问题描述】:

当我构建我的 swagger.json 文件时,我不知道要使用哪个主机。但是,当我的托管 swaggerui 的页面加载时,我可以解决这个问题(实际上我可能想为用户提供一个选择)。我希望在 swaggerUI 对象的配置上看到 options.host - 我没有看到。是否有一种我无法找到的现有方法,或者我只需通过代码破解我的方式并添加此功能(欢迎指向最佳位置的指针)

【问题讨论】:

标签: swagger-ui


【解决方案1】:

Swagger 具有用于主机配置的内置 json 定义,或者可以接受多个输入。

{
    "swagger": "2.0",
    "info": {
        "title": "Why API",
        "description": "Don't make that mistake again",
        "version": "0.0.1"
    },

    "host": "127.0.0.1:3000",
    "schemes": [
        "https"
    ]
}

或者

"host": "test.mydomain.com:3000",
"schemes": [
    "https"
],

或者您可以通过定义 var 并调用主机名或机器名或其他环境变量来拥有动态主机。

动态示例

if (typeof this.host === 'undefined' || this.host === '') {
  this.host = location.host;
}
if (location.port) {
  this.host = this.host + ':' + location.port;
}

【讨论】:

  • 第一部分不符合我的需要。我在写 swagger.json 的时候不知道宿主。第二部分基本上说更改 swagger-js/lib/client.js 中的代码。不用说 mod 是什么 - 事实上我解决了这个问题并提交了一个拉到那个文件
  • 建议应该删除这个答案,因为它没有解决 OP 实际要求的问题,正如他在上面指出的那样。
【解决方案2】:

两种方式

修改 swagger.js 使其接受主机选项。 swagger-UI 将选项传递给 swagger-js 以便工作。我通过此修复提交了对 swagger-js 的拉动

第二个选择是 swagger-UI 接受一个 'spec' 参数。这意味着托管页面可以加载 swagger.json 文件,JSON.parse it ,在其中设置 'host' 然后传递给 swaggerUi 构造函数。这对调用者来说更难,但不需要更改代码即可大摇大摆

【讨论】:

【解决方案3】:

这就是我所做的,因为加载的文档只是一个 JSON 对象:

var swaggerDoc = require('./api/swagger.json');
if (process.env.NODE_ENV === 'development') {
  swaggerDoc.host="localhost:" + process.env.PORT
}

// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) {
  // Other initialization
}

这样您就不会因开发环境配置而污染您的 API 规范。

【讨论】:

    【解决方案4】:

    这就是我使用 Java 客户端的方式:

    DefaultApi api = new DefaultApi();
    api.getApiClient().setBasePath("http://localhost:8080");
    //call the API
    

    【讨论】:

      【解决方案5】:

      在 Swagger UI 的最新版本中,可以执行此操作,例如在 onComplete 中:

      window.swaggerUi.api.setHost("your.host:4242");

      【讨论】:

      • 在我的调试控制台中运行它对我来说是一个不错的快速而肮脏的解决方案。谢谢!
      • 对临时修复很有帮助
      【解决方案6】:

      如果您将其托管在同一应用服务器上,只需从 json 中删除主机密钥并在密钥“basePath”中提供相对路径。作为 - "basePath": "/rest/createcampaign"。

      【讨论】:

        【解决方案7】:

        如果您使用 OpenApi 3.0

        变量可以有任意值,也可以限制为一个枚举。在任何情况下,都需要一个默认值,如果客户端不提供值,将使用该默认值。

        swagger doc

        在 swagger-ui 中会有默认值,但该字段是输入字段,因此可以在运行时自定义它。

        【讨论】:

          【解决方案8】:

          您可以按照以下两种方式进行操作:

          1. 加载 index.html 并将 https://petstore.swagger.io/v2/swagger.json 替换为您的 swagger.json 托管的 URL。
            您可以在同一台服务器上公开本地swagger.json
            当您采用这种方法时,请确保在上述步骤的末尾包含静态文件。
            如果您不想将swagger.json 公开为API,请将sawgger.json 复制到swagger 的dist 文件夹中。 index.html 和 swagger.json 必须在同一个存储库中。它在 swagger-ui-dist 的 dist 文件夹的index.html 内。
          const ui = SwaggerUIBundle({
                    spec: location.host,
                    url: "swagger.json",
                    dom_id: "#swagger-ui",
                    deepLinking: true,
                    presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
                    plugins: [SwaggerUIBundle.plugins.DownloadUrl],
                    layout: "StandaloneLayout"
                  });
                  // End Swagger UI call region
          
                  window.ui = ui;
                };
          
          1. 第二种方式,swagger.yaml/swagger.json中的主机参数要么设为空
            "host":""
            或省略主机参数。
            Swagger 将服务器的主机作为托管 swagger ui 的主机。

          【讨论】:

            【解决方案9】:

            Swagger UI express 本身提供以下 sn-p 它获取当前主机并与主机动态发布

            app.use('/api-docs', function(req, res, next){
                swaggerDocument.host = req.get('host');
                req.swaggerDoc = swaggerDocument;
                next();
            }, swaggerUi.serve, swaggerUi.setup());
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-23
              • 2014-06-06
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多