嗨,我正在使用 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 设计范式,这些范式似乎超出了这个问题的范围。
至于关于所需参数的其他问题 - 那么是的,您可以将整个参数设置为必需的。如果将其从字符串更改为实际模型,则可以根据需要或非必需设置该模型的特定字段。