告诉swaggerui主持人的最佳方式

时间:2015-06-19 00:14:51

标签: swagger-ui

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

9 个答案:

答案 0 :(得分:5)

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;
}

答案 1 :(得分:5)

这是我的工作,因为加载的文档只是一个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规范。

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

两种方式

修改swagger.js以便它接受主机选项。 swagger-UI将选项传递给swagger-js以便工作。我使用此修复程序向swagger-js提交了一个拉动

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

这就是我使用Java客户端执行此操作的方法:

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

答案 6 :(得分:0)

如果您使用的是OpenApi 3.0

  

变量可以具有任意值,或者可以限制为枚举。无论如何,都需要一个默认值,如果客户端不提供值,则将使用默认值。

swagger doc

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

enter image description here

答案 7 :(得分:0)

有2种方法可以遵循:

  1. 加载index.html,并用您的swagger.json托管的网址替换““ https://petstore.swagger.io/v2/swagger.json”。
    您可以在同一服务器上公开本地swagger.json。
    当您采用这种方法时,请确保在上述步骤的末尾包含静态文件。
    如果您不想将swagger.json作为API公开,请在swagger的dist文件夹中复制sawgger.json。为此,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的主机。

答案 8 :(得分:0)

Swagger UI 表达本身提供以下代码段,它获取当前主机并使用主机动态发布

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