2

目前该Schema定义根本没有记录,我能找到的唯一资源是这些:

http://support.apiary.io/knowledgebase/articles/147279-json-schema-validation https://github.com/apiaryio/api-blueprint/issues/112

但是这些示例都没有讨论如何创建嵌套模式。

我想验证这个回复:

{
    date: (datetime),
    url: (url),
    changes: [
        {
            date: (datetime),
            url: (url)
        },
        ...
    ],
    items: [
        {
            name: (string),
            url: (url)
        },
        ...
    ]
}

根据我目前的知识,我已经开始创建看起来像这样的模式

{
    "type": "object",
    "required": true,
    "properties": {
        "date": {
            "type": "datetime",
            "required": true
        },
        "url": {
            "type": "string",
            "required": true
        },
        "changes": {
            "type": "array",
            "required": true
        },
        "items": {
            "type": "array",
            "required": true
        }
    }
}

但是如何为嵌套item和创建架构change

我可以使用哪些类型?

如何验证datetime?期望值为YYYY-MM-DD HH:MM:SS

4

2 回答 2

0

测试响应是基于您的示例的以下 JSON 片段。数组包含两个对象,因此您想要测试的修改更容易。

{
  "date": "2015-02-05T00:00:00.000Z",
  "url": "mysite.com",
  "changes": [
    {
      "date": "2015-03-05T00:00:00.000Z",
      "url": "mysite.com/edit/1"
    },
    {
      "date": "2015-03-04T00:00:00.000Z",
      "url": "mysite.com/edit/4"
    }
  ],
  "items": [
    {
      "name": "Item One",
      "url": "mysite.com/items/1"
    },
    {
      "name": "Item Two",
      "url": "mysite.com/items/2"
    }
  ]
}

以下模式将使用 draft-04 规范验证上述 JSON。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Nested Example",
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "format": "date-time"
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": ["date", "url"]
      }
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": ["name", "url"]
      }
    }
  },
  "required": ["date", "url", "changes", "items"]
}

有以下类型可用:

  • 大批
  • 布尔值
  • 整数
  • 数字
  • 无效的
  • 目的
  • 细绳

原始类型


验证


我没有时间研究在本地执行此操作的工具和工作流程,因此我一直在使用进行验证。

于 2015-03-05T22:33:10.810 回答
0

到目前为止,我最终这样做了。一旦我的 API 端点启动并正常工作,我仍然必须对其进行测试

{
    "type": "object",
    "required": true,
    "properties": {
        "date": {
            "type": "string",
            "format": "date-time",
            "required": true
        },
        "url": {
            "type": "string",
            "format": "url",
            "required": true
        },
        "changes": {
            "type": "array",
            "required": true,
            "items": {
                "type": "object",
                "required": true,
                "properties": {
                    "date": {
                        "type": "string",
                        "format": "date-time",
                        "required": true
                    },
                    "url": {
                        "type": "string",
                        "format": "url",
                        "required": true
                    }
                }
            }
        },
        "items": {
            "type": "array",
            "required": true,
            "items": {
                "type": "object",
                "required": true,
                "properties": {
                    "name": {
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "type": "string",
                        "format": "url",
                        "required": true
                    }
                }
            }
        }
    }
}
于 2015-01-29T19:22:17.020 回答