我想使用单个JSON模式来创建和更新(修补)我的应用程序中的记录。问题发生在required
属性,我不知道如何修改以进行修补。我应该允许对记录进行部分更新。
我只能想到2个解决方案,但这些解决方案对我来说都不是很好。我相信一定有更好的方法。
解决方案1:动态修改架构以进行修补。基本上导入模式,删除required
属性或修改它,并使用该模式进行验证。
解决方案2:在修补程序请求中,获取现有条目,并应用来自请求的数据。
这是一个json模式示例:
{
"$id": "https://myapp.com/schemas/post.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Post",
"description": "Blog post",
"properties": {
"title": {
"type": "string",
"description": "Post title"
},
"body": {
"type": "string",
"description": "Post content"
}
},
"required": ["title", "body"]
}
最初,在创建帖子时,我需要两个属性。后来,我想只允许更改一个条目。所以客户端只能发送到休息API body
,我应该能够针对模式正确地验证它。
JSON Schema不知道如何使用它,因此您无法在JSON Schema中对此进行内在编码。
您可以创建两个模式,一个用于整个对象验证,另一个用于补丁请求。在验证模式中,您将引用补丁模式,并添加required
。
但是,我不建议这样做,因为您可能会发现您在以后创建和修补时无法通过这种方式管理的验证要求不同。
将补丁请求应用于对象,然后使用模式进行验证,然后保存到数据库(假设这是您的最后一步)可能更自然。毕竟,您可能会发现您具有基于其他值的验证条件(这意味着您无论如何都需要在JSON模式之外进行额外验证)。
这些资源可能很有用:
RFC-6902 JavaScript对象表示法(JSON)补丁
https://tools.ietf.org/html/rfc6902
JSON Patch定义了一个JSON文档结构,用于表示要应用于JavaScript Object Notation(JSON)文档的操作序列;它适用于HTTP PATCH方法。 “application / json-patch + json”媒体类型用于识别此类补丁文档。
https://github.com/Starcounter-Jack/JSON-Patch
“精益和JSON-Patch标准(RFC 6902)的Javascript实现。使用增量补丁更新JSON文档。”
https://www.npmjs.com/package/fast-json-patch
使用JSON-Patch,您可以:applyPatch应用补丁applyOperation以应用单个操作验证一系列补丁观察更改(并在检测到更改时生成补丁)比较两个对象(以获得差异)。