0

嗨,我正在使用 swagger UI 在我的 node.js 应用程序中记录 API。我成功配置并且工作正常。

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

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

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

然后服务器崩溃了。我必须为这个参数添加验证,所以我怎样才能在这个特定参数上添加验证。

4

1 回答 1

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 设计范式,这些范式似乎超出了这个问题的范围。

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

于 2014-11-14T11:00:42.140 回答