在swagger UI中为节点js添加json格式的验证

时间:2014-11-14 09:55:45

标签: json node.js swagger swagger-ui swagger-node-express

您好我在我的node.js应用程序中使用swagger UI来记录API。我成功配置,它工作正常。

但我现在正面临一个严重的问题。

这是我的控制器中的示例swagger代码

exports.people = {
  'spec':
  {
    path : "/people",
    method: "POST",
    summary : "Create new person",
    notes : "Create new person",
    nickname : "people",    
    parameters : [param.form("email", "email", "string", true), 
                  param.form("firstName", "firstName", "string", true),
                  param.form("paylod", "Payload", "string", true),
                  param.form("lastName", "lastName", "string", true)]   
  },
  'action': function(req, res)
  {

        -----code----
  }
}

在此,我有payload参数,其值为json格式为

{"id": <your-ID>,"latd":<latitude- value>","long":<longitude- value>"}

但如果我通过invalid json喜欢

 id=abc latd=1234 long=asv

然后服务器崩溃。我必须为此参数添加验证,以便如何在此特定参数上添加验证。

1 个答案:

答案 0 :(得分:0)

您可以将"payload"的类型设置为具有id,latd和long字段的模型,这应该有用。

但是,你应该记住,在Swagger 2.0中,这不再受支持了。

API方面,设计存在问题 - 由于您使用表单参数,因此内容类型必须为multipart/form-data,这意味着表单参数本身不会拥有自己的内容类型,并且应该保持与表示无关。说值的结构是一个JSON结构几乎打破了它(文档方面,你没有办法说它需要结构化为JSON而不是XML)。

通常,当您希望操作使用结构化数据(通常使用POST / PUT方法)时,您可以将操作的总有效负载设置为该数据。要完成此操作,您可以将请求的mime类型设置为结构化数据的mime类型。在上面的示例中,最简单的mime类型将是application/json。在Swagger中,转换为"consumes"属性。参数类型本身在Swagger中转换为body参数。

然后将其他参数转换为查询参数,路径参数或标题参数,其中查询参数在大多数情况下将是更明显的选择。根据操作的逻辑,将附加参数作为有效负载对象本身的一部分推送也是有意义的。这涉及到各种API设计范例,似乎超出了这个问题的范围。

关于所需参数的附加问题 - 是的,您可以根据需要将参数设置为整​​体。如果将其从字符串更改为实际模型,则可以根据需要设置该模型的特定字段。