2015-05-03 2 views
0

Я смущен, о какой ситуации я определяю свойства в моих json-схемах.Какие свойства элемента должны быть включены в 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" 
    ] 
} 

ответ

2

Вы должны определить только в свойствах схемы JSON, которые рассматриваются с пользователем по API.

В вашем случае это не имеет смысла иметь id и brand_id в схеме, которая определяет тело объекта POST для создания нового product, поскольку эти значения не предоставляется пользователем API.

У вас может быть другая схема для существующих объектов product, в которых присутствуют эти два поля, если доступно публиковать их публично.

Если это так, то для этого можно использовать схемы механизм союзного и есть «существующий продукт» схема именования allOfnew_product.json и добавьте id и brand_id к нему.

+1

Спасибо, Дэвид. Для тех, кто найдет это с тем же вопросом, что и я, я нашел хорошую запись для профсоюзного механизма, о котором Дэвид упоминает в http://spacetelescope.github.io/understanding-json-schema/reference/combining.html, который стоит того читать. – Esben

Смежные вопросы