我对我在json模式中定义属性的情况感到困惑。
假设我有一个项目product
,我正在尝试定义一个模式。在我的数据库中,products
表格包含id
,brand_id
,name
,item_number
和description
。除description
之外的所有字段都是必填字段。 id
由数据库自动生成,brand_id
在api根据用户创建时自动创建时设置。
这意味着我POST /api/products
只能使用以下数据:
{
"product": {
"name": "Product Name",
"item_number": "item001"
}
}
但是,我现在该如何定义产品架构?我应该包含属性id
和brand_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"
]
}
答案 0 :(得分:2)
您应该只在您的JSON模式属性中定义由API用户处理的属性。
在您的情况下,在定义POST正文实体以创建新id
的架构中使用brand_id
和product
是没有意义的,因为这些值未提供由API用户。
这就是说,对于存在这两个字段的现有product
实体,您可能有另一个模式,如果可以公开公开它们。
如果是这种情况,为此您可以使用模式联合机制并拥有"现有产品"架构使用allOf
new_product.json
并向其添加id
和brand_id
。