如何创建嵌套模式?

时间:2015-01-29 18:31:45

标签: apiblueprint

目前根本没有记录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
        }
    }
}

但如何为嵌套itemchange

创建架构

我可以使用哪些类型?

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

2 个答案:

答案 0 :(得分: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
                    }
                }
            }
        }
    }
}

答案 1 :(得分: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"]
}

可以使用以下类型:

  • 阵列
  • 布尔
  • 整数
  • 物体
  • 字符串

Primitive Types


Validation


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