Схема проверки узла AJV
Использование версии 6.5
У меня проблема в том, что у меня есть объект запроса, который должен содержать один атрибут и должен содержать один и только один другой атрибут из списка атрибутов ИЛИ ни один из указанных атрибутов. Я немного покопался и не смог найти решение этой проблемы.
Возможные действительные запросы:
{ 'query': {...}, 'limit': 1 }
{ 'query': {...}, 'count': true }
{ 'query': {...}, 'max': 'my_string' }
Недопустимый запрос будет:
{ 'query': {...}, 'limit': 1, 'count': true }
или же
{ 'query': {...}, 'max': 'my_string', limit: 1 }
и т.п.
Лучший объект валидатора ajv, который я придумал, следующий:
{
"type": "object",
"required": ["query"],
"maxProperties": 2,
"properties": {
"query": {
"type": "object"
},
"limit": {
"type": "integer"
},
"count": {
"type": "boolean"
},
"max": {
"type": "string"
}
}
}
Но я знаю, что это не будет масштабироваться по мере роста нашего приложения. Мне было интересно, если есть способ указать, что объект требует "запрос" и ОДИН или НЕТ "предел", "количество", "макс.
1 ответ
Нашел способ выполнить то, что я ищу. Это можно сделать с помощью валидатора "зависимости":
"dependencies": {
"limit": { "properties":
{
"count": { "not": {} },
"max": { "not": {} }
}
},
"count": { "properties":
{
"limit": { "not": {} },
"max": { "not": {} }
}
},
"max": { "properties":
{
"limit": { "not": {} },
"count": { "not": {} }
}
}
}
Если кто-нибудь знает лучший способ, я хотел бы знать!