我们正在使用Swagger,AWS API网关和带有NodeJS的Lambda函数构建API。 API网关将执行请求验证,但是根据设计,lambda函数需要将请求对象重新验证为API Gateway Proxy Request Event。这是有道理的,因为理论上我们可以通过其他事件源(例如SNS)调用lambda函数来重用它们。
因此,我们需要一个NodeJS工具,它可以根据swagger规范验证请求(不仅是主体,还有params等) - 确切地说是swagger工具和其他一些工具(例如swagger-request-validator)正在做什么,而不是作为中间件。
我做了一些搜索,但找不到一个,也查看了swagger-tools源代码,估计它的验证组件是以不能单独使用的方式编写的。
任何建议都是受欢迎的。提前致谢。
你可以使用swagger-model-validator。
var Validator = require('swagger-model-validator');
var swaggerFile = require("./swagger.json");
const validator = new Validator(swaggerFile);
console.log(validator.validate({
name: 'meg'
}, swaggerFile.definitions.Pet, swaggerFile.definitions, true).GetErrorMessages())
这输出:
['photoUrls是必填字段']
validator.validate
返回一个对象,因此您还可以检查返回的对象是否包含errors
属性下的任何内容。它应该如此简单
if (validator.validate({
name: 'meg'
}, swaggerFile.definitions.Pet, swaggerFile.definitions, true).errors) {
// do something with error
}
我用Swagger's sample JSON来回答这个问题。