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

What properties of an item should be included in the json schema?

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

假设我有一个项目 product,我正在尝试为其定义架构。在我的数据库中,products table 有 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"
  ]
}

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

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

这就是说,如果可以公开显示这两个字段,您可能对存在这两个字段的现有 product 实体有另一个架构。

如果是这样,为此您可以使用模式联合机制并让 "existing product" 模式使用 allOf new_product.json 并添加 idbrand_id 给它。