我们正在为一个Web应用程序构建一个前端项目,该项目与另一个团队编写的后端进行通信。一些开发人员在两个项目上工作,并且对后端和响应字段的更改有了更好的了解。
最近,我们有部分前端中断,因为它们基于后端的更改对应用程序的某些部分进行了更改,而没有在所有位置更新逻辑。为了减轻这种情况,我想提出一个掩码/模板的概念,所有响应数据都将通过该掩码/模板进行管理。这样,团队中不熟悉后端的其他成员就可以注意到/解决这些错误。
为此,我正在考虑使用JSON模式。但是,我不想简单地进行验证,而是要通过它解析后端数据(删除架构中不存在的字段)。这样,开发人员响应后端的更改而在前端进行更改时,也将需要更新此模板,从而触发测试失败,直到使用该模式的所有逻辑都被更新(而不仅仅是他接触的逻辑)。我在玩https://www.npmjs.com/package/jsonschema,但似乎没有办法删除多余的字段,只需对其进行测试即可。
在JSON模式中,我还可以设置additionalProperties
标志。但是,它有两个问题:
也许验证器不是正确的工具,但这就是我在搜索JSON模式解析器时发现的全部。有人可以指引我正确的方向,这样我就不会重新发明车轮吗?听起来此功能与验证程序已经完成的功能非常相似,我宁愿在同一遍中进行此处理。
答案 0 :(得分:0)
找到了一个符合我要求的验证器:https://github.com/acornejo/jjv。它具有我可以设置的removalAdditional
标志,这是我进行的快速测试:
var jjv = require('jjv')();
var addressSchema = {
"id": "address",
"type": "object",
"properties": {
"lines": {
"type": "array",
"items": {"type": "string"}
},
"zip": {"type": "string"},
"city": {"type": "string"},
"country": {"type": "string"}
},
"required": ["country"]
};
var schema = {
"id": "person",
"type": "object",
"properties": {
"name": {"type": "string"},
"address": {"$ref": "address"},
"votes": {"type": "integer", "minimum": 1}
}
};
var p = {
"name": "Barack Obama",
"address": {
"lines": [ "1600 Pennsylvania Avenue Northwest" ],
"zip": "DC 20500",
"city": "Washington",
"foobar": "baz",
"country": "USA"
},
"a": {
"b": 1,
"c": 2
},
"votes": "lots",
"stuff": "yes"
};
jjv.addSchema('address', addressSchema);
jjv.addSchema('schema', schema);
jjv.defaultOptions.checkRequired = true;
jjv.defaultOptions.removeAdditional = true;
console.log(jjv.validate('schema', p));
console.log(p);
以及回应:
{ validation: { votes: { type: 'integer' } } }
{ name: 'Barack Obama',
address:
{ lines: [ '1600 Pennsylvania Avenue Northwest' ],
zip: 'DC 20500',
city: 'Washington',
country: 'USA' },
votes: 'lots' }