应该在json架构中包含项的哪些属性?

时间:2015-05-03 19:13:43

标签: jsonschema raml

我对我在json模式中定义属性的情况感到困惑。

假设我有一个项目product,我正在尝试定义一个模式。在我的数据库中,products表格包含idbrand_idnameitem_numberdescription。除description之外的所有字段都是必填字段。 id由数据库自动生成,brand_id在api根据用户创建时自动创建时设置。

这意味着我POST /api/products只能使用以下数据:

{
  "product": {
    "name": "Product Name",
    "item_number": "item001"
  }
}

但是,我现在该如何定义产品架构?我应该包含属性idbrand_id吗?如果是这样,我是否应该根据需要对它们进行标记,即使它们是自动设置的?

这就是我提出的:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://jsonschema.net/products",
  "type": "object",
  "properties": {
    "item_number": {
      "id": "http://jsonschema.net/products/item_number",
      "type": "string"
    },
    "name": {
      "id": "http://jsonschema.net/products/name",
      "type": "string"
    },
    "description": {
      "id": "http://jsonschema.net/products/description",
      "type": "string",
      "default": "null"
    }
  },
  "required": [
    "item_number",
    "name"
  ]
}

1 个答案:

答案 0 :(得分:2)

您应该只在您的JSON模式属性中定义由API用户处理的属性。

在您的情况下,在定义POST正文实体以创建新id的架构中使用brand_idproduct是没有意义的,因为这些值未提供由API用户。

这就是说,对于存在这两个字段的现有product实体,您可能有另一个模式,如果可以公开公开它们。

如果是这种情况,为此您可以使用模式联合机制并拥有"现有产品"架构使用allOf new_product.json并向其添加idbrand_id