您好我在我的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
然后服务器崩溃。我必须为此参数添加验证,以便如何在此特定参数上添加验证。
答案 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设计范例,似乎超出了这个问题的范围。
关于所需参数的附加问题 - 是的,您可以根据需要将参数设置为整体。如果将其从字符串更改为实际模型,则可以根据需要设置该模型的特定字段。