схема проверки узла AJV - PullRequest
0 голосов
/ 10 мая 2018

Использование версии 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 Ответ

0 голосов
/ 10 мая 2018

Нашел способ выполнить то, что я ищу. Это можно сделать с помощью валидатора «зависимости»:

"dependencies": {
    "limit": { "properties": 
        { 
            "count": { "not": {} },
            "max": { "not": {} }
        }
    },
    "count": { "properties": 
        { 
            "limit": { "not": {} },
            "max": { "not": {} }
        }
    },
    "max": { "properties": 
        { 
            "limit": { "not": {} },
            "count": { "not": {} }
        }
    }
}

Если кто-нибудь знает лучший способ, я бы хотел знать!

...