暗示其架构的 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" }
    ]
  }
}

这样客户端不需要告诉你使用什么模式,你告诉客户端哪些模式是允许的。只要数组中的每一项都匹配可能的选项之一,验证就会成功。

如果您需要更具体地了解数组中的项目,您可以重构架构以隔离类型。