如何从javascript访问swagger yaml定义的对象

时间:2017-02-03 19:32:18

标签: swagger swagger-ui swagger-2.0 swagger-editor swagger-codegen

我使用Swagger Yaml来描述端点并生成模拟服务器。现有端点(我嘲笑)并不是100%遵循RESTful原则,所以我只想覆盖模拟服务器返回的响应。简单的服务器代码如下所示:

var swagger         = require('swagger-server');
var server          = swagger('map-cache.yaml');

var port            = 7072;

server.post('/map-qa_trunk/v2/getData', function(req, res, next) {
    var foo = { 
        err : 123,
        msg : "error message"
    };  
    res.json(foo);
});

server.listen(port, function() {
  console.log('Map Cache Mock Server is now running at http://localhost:' + port);
});

在Yaml定义中,有一个名为MapResponseData的对象定义,如何创建该对象的实例,以便我可以根据需要填充它并返回res.json()?类似于下面的东西:

var response = getMapResponseData(); // don't know what this call should be
response.fieldA = 123;
res.json(response);

我猜这应该是可能的,因为Swagger解析了YAML文件,并且知道所有指定的定义。

1 个答案:

答案 0 :(得分:1)

尝试将请求对象输出到console.log以查看是否可以找到对swagger定义的引用。另一种选择是从yaml文件中提取解析的swagger定义(例如使用js-yaml)并从那里提取。

但是,我最好的建议是使用swagger-tools而不是swagger-server。 swagger-server软件包是alpha版本,比swagger-tools更少的下载,修订和用户。 swagger-tools的好处在于它将得到积极维护,并且有一个更大的社区可以为您提供支持。要将项目转换为swagger-tools,请使用swagger.io> Swagger编辑器>在线编辑器>在左窗格中粘贴yaml>生成服务器> Node.js的

在swagger-tools中,每个请求对象都包含整个Swagger Yaml定义:

req.swagger.swaggerObject

您可以根据需要从中提取响应对象定义。