2017-02-07 3 views
0

У меня есть маршрут API, который прежде всего проверяет json-схему для обработки логики.JSON-Schema draft-04 - OneOf с обязательным

Этот маршрут может создавать 2 типа «Статьи» на основе отправленного JSON. Я использовал OneOf, чтобы проверить, соответствует ли схема одному из этих двух типов.

{ 
    "type": "object", 
    "oneOf": [{ 
     "properties": { 
      "name": { 
       "type": "string", 
      }, 
      "description": { 
       "type": "string" 
      } 
     } 
    }, { 
     "properties": { 
      "author": { 
       "type": "string", 
      }, 
      "editor": { 
       "type": "string" 
      } 
     }, 
     "required":["author", "editor"] 
    }] 
} 

  • Таким образом, первый тип может иметь название и описание, но это поле не требуется.

  • Второй тип должен иметь автор и редактор.

Что случилось, если JSON схема отправляются только с автором поля? (редактор пуст)

Спасибо за ваши ответы.

ответ

1

По определению oneOf ключевого слова

Для подтверждения против oneOf, приведенные данные должны быть достоверны против точно один из заданных подсхем.

В пути ваша схема определяется, объект, содержащий только свойство «автор» всегда будет проверять, в силу определения кулака oneOf можно перевести как:

Объект с любым набором свойств действителен, но если объект содержит свойства «имя» и «описание», они должны иметь тип строки.

Как вы можете видеть, объект, содержащий только свойство «автор», является полностью верным этим определением.

В действительности, любой данный объект будет проверен только на второе определение oneOf (автор, редактор), если данный объект содержит свойства «имя» и/или «описание», и они не являются строками.

Это хорошая ссылка для обучения JSON Schema https://spacetelescope.github.io/understanding-json-schema/

И это хороший JSON Schema валидатор http://www.jsonschemavalidator.net