我想使用单个JSON模式在我的应用程序中创建和更新(更新)记录。问题发生在required
属性中,我不知道该如何更改以进行修补。我应该允许对记录进行部分更新。
我只能想到两个解决方案,但是这些解决方案对我来说都不是一件好事。我相信一定有更好的方法。
解决方案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"]
}
最初,创建帖子时,我需要两个属性。以后,我只允许更改一个条目。因此,客户端只能将body
发送到其余API,我应该能够根据架构正确验证它。
答案 0 :(得分:1)
JSON Schema不了解其用法,因此您无法在JSON Schema中对其进行固有编码。
您可以创建两个模式,一个用于整个对象验证,一个用于补丁程序请求。在验证架构中,您将引用补丁架构,并添加required
。
但是,我不建议您这样做,因为您可能会发现对于以后无法创建和修补的行有不同的验证要求。
将补丁请求应用于对象,然后使用模式进行验证,然后保存到数据库中(假设这是您的最后一步),可能更自然。毕竟,您可能会发现您具有基于其他值的验证条件(这意味着您仍然需要在JSON Schema之外进行其他验证)。
答案 1 :(得分:0)
这些资源可能有用:
RFC-6902 JavaScript对象表示法(JSON)补丁
https://tools.ietf.org/html/rfc6902
JSON修补程序定义了JSON文档结构,用于表示要应用于JavaScript对象表示法(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以应用单个操作 验证补丁序列 观察变化(并在检测到变化时生成补丁) 比较两个对象(以获得差异)。