验证唯一属性 JSON 架构
Validate unique attributes JSON Schema
有没有办法从我的架构中定义一些属性来创建组合并使用 JSON 架构验证 json 文档是否已经存在?
例如考虑下面的口袋妖怪模式:
"$schema": "http://json-schema.org/2020-12/schema,
"title": "pokemon",
"description" : "a simple pokemon test",
"type": "object",
"properties" : {
"name":{
"type":"string"
},
"owner":{
"type":"string"
},
"color":{
"type":"string"
}
}
我想要的是将颜色和所有者定义为我的唯一键,然后每次有一个 POST 调用时确定是否已经存在具有这些值的口袋妖怪,如果是则拒绝并且不保存数据。不确定我是否可以通过扩展模式并向每个 属性 添加一个额外的 属性 像布尔值然后比较来做到这一点。
在介绍架构支持选项之前,我想先说明一下您的用法。
JSON 架构能够验证单个 JSON 文档(实例)。因此,它可以根据模式检查它包含的数据,但不能检查外部数据。
看起来您想要做的是根据数据库检查传入实例。 JSON 架构不支持此功能。 JSON 在这种情况下,架构只能验证传入的实例。
您最好的选择是使用数据库本身的查询语言来查询数据库以获取匹配值。大多数数据库还允许您定义唯一性约束。有些允许多个值,但如果您的唯一性约束仅支持单个值,则您始终可以存储一个复合值,如 {color}_{owner}
并定义一个约束。
如果您仍想使用 JSON 架构来提供此验证,那么我认为您需要更多地描述您的架构。
有没有办法从我的架构中定义一些属性来创建组合并使用 JSON 架构验证 json 文档是否已经存在?
例如考虑下面的口袋妖怪模式:
"$schema": "http://json-schema.org/2020-12/schema,
"title": "pokemon",
"description" : "a simple pokemon test",
"type": "object",
"properties" : {
"name":{
"type":"string"
},
"owner":{
"type":"string"
},
"color":{
"type":"string"
}
}
我想要的是将颜色和所有者定义为我的唯一键,然后每次有一个 POST 调用时确定是否已经存在具有这些值的口袋妖怪,如果是则拒绝并且不保存数据。不确定我是否可以通过扩展模式并向每个 属性 添加一个额外的 属性 像布尔值然后比较来做到这一点。
在介绍架构支持选项之前,我想先说明一下您的用法。
JSON 架构能够验证单个 JSON 文档(实例)。因此,它可以根据模式检查它包含的数据,但不能检查外部数据。
看起来您想要做的是根据数据库检查传入实例。 JSON 架构不支持此功能。 JSON 在这种情况下,架构只能验证传入的实例。
您最好的选择是使用数据库本身的查询语言来查询数据库以获取匹配值。大多数数据库还允许您定义唯一性约束。有些允许多个值,但如果您的唯一性约束仅支持单个值,则您始终可以存储一个复合值,如 {color}_{owner}
并定义一个约束。
如果您仍想使用 JSON 架构来提供此验证,那么我认为您需要更多地描述您的架构。