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



嗨,我正在使用 swagger UI 来记录我的节点.js应用程序中的 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

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

您可以将

"payload"的类型设置为具有 id、latd 和长字段的模型,这应该可以工作。

但是,您应该记住,在Swagger 2.0中,这不再真正受支持。

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

通常

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

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

至于关于所需参数的其他问题 - 那么是的,您可以将整个参数设置为必需的。如果将其从字符串更改为实际模型,则可以根据需要或非必需设置该模型的特定字段。

最新更新