暗示其架构的 JSONSchema 资源
JSONSchema Resource that hints at its schema
我正在尝试寻找获取资源的最佳方式,以某种方式指示应该用于验证它的架构。
我需要这个,因为有时我需要 return 一个充满不同资源的数组。在这种情况下,我需要数组中的每个资源来告诉我它应该用什么模式进行验证。
最好的方法是什么?
我的想法是使用嵌套的 JSONSchema,其中外部对象具有资源名称(例如汽车):
{
'type': 'object',
'properties': {
'car': {
{
'type': 'object',
'title': 'car',
'properties': OrderedDict([('id', {
'type': 'integer'
})]),
'required': ['id']
}
},
'required': [
'car'
]
}
然后我可以在资源中清楚地看到应该使用哪个模式进行验证:
{
'car': {
'id': 1,
}
}
然后在我需要 return 一组不同资源的情况下,每个资源都可以轻松识别并正确验证:
{
'items': [
{
'car': {
'id': 1,
}
},
{
'helicopter': {
'id': 1,
}
},
]
}
在 JSON Schema 中处理类似问题的方法是使用 anyOf
约束。
{
"type": "array",
"items": {
"anyOf": [
{ "$ref": "car.json" },
{ "$ref": "helicopter.json" }
]
}
}
这样客户端不需要告诉你使用什么模式,你告诉客户端哪些模式是允许的。只要数组中的每一项都匹配可能的选项之一,验证就会成功。
如果您需要更具体地了解数组中的项目,您可以重构架构以隔离类型。
我正在尝试寻找获取资源的最佳方式,以某种方式指示应该用于验证它的架构。
我需要这个,因为有时我需要 return 一个充满不同资源的数组。在这种情况下,我需要数组中的每个资源来告诉我它应该用什么模式进行验证。
最好的方法是什么?
我的想法是使用嵌套的 JSONSchema,其中外部对象具有资源名称(例如汽车):
{
'type': 'object',
'properties': {
'car': {
{
'type': 'object',
'title': 'car',
'properties': OrderedDict([('id', {
'type': 'integer'
})]),
'required': ['id']
}
},
'required': [
'car'
]
}
然后我可以在资源中清楚地看到应该使用哪个模式进行验证:
{
'car': {
'id': 1,
}
}
然后在我需要 return 一组不同资源的情况下,每个资源都可以轻松识别并正确验证:
{
'items': [
{
'car': {
'id': 1,
}
},
{
'helicopter': {
'id': 1,
}
},
]
}
在 JSON Schema 中处理类似问题的方法是使用 anyOf
约束。
{
"type": "array",
"items": {
"anyOf": [
{ "$ref": "car.json" },
{ "$ref": "helicopter.json" }
]
}
}
这样客户端不需要告诉你使用什么模式,你告诉客户端哪些模式是允许的。只要数组中的每一项都匹配可能的选项之一,验证就会成功。
如果您需要更具体地了解数组中的项目,您可以重构架构以隔离类型。