Проверить один атрибут объекта, используя схему json

В настоящее время я использую tv4 (валидатор json-schema) для проверки (на стороне клиента) объекта с json-схемой, которая работала очень хорошо.

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

Например, у меня есть пользователь:

var user = { Name: 'Username', Age: 20 };

И схема:

{
    "title": "UserValidation",
    "type": "object",
    "properties": {
        "Name": {
            "minLength": 4
        },
        "Age": {
            "type": "int"
        }
    }
}

И когда я только меняю имя, я не хочу проверять, действителен ли атрибут "Возраст".

Причина: когда у меня есть большой объект (с подмоделями и т. д.), он будет проверять все свойства. И я не знаю, будет ли это проблемой производительности (когда-нибудь...).

  • Это возможный случай с проверкой схемы?
  • Или есть лучшие способы проверки объектов?

Я использую AngularJS, кстати.

С уважением и благодарностью.


person DevTrong    schedule 06.10.2014    source источник


Ответы (2)


У вас нет проблем с производительностью, пока у вас не возникнет проблема с производительностью. :)

Нет никаких технических причин, по которым не должно существовать такого валидатора частичного обновления (я знаю по крайней мере один, но он не совсем быстрый). Существуют также более быстрые валидаторы «с нуля» (некоторые с тестами), в том числе некоторые с очень похожими API/отчетами об ошибках, поэтому, если в будущем вы начнете сталкиваться с проблемами производительности, вы сможете переключиться без особых хлопот.

Однако, учитывая, что это происходит на стороне клиента (поэтому у вас нет проблем с масштабированием с большим количеством пользователей), я бы пока не беспокоился об этом.

person cloudfeet    schedule 06.10.2014
comment
Спасибо, мне очень помогли! :) - person DevTrong; 07.10.2014
comment
Это полезно, если вы используете PATCH или дополнительный PUT, например PUT product/1 против PUT product/1/offers - person quazardous; 24.06.2021

Я думаю, вам нужно будет выбрать подсхему для проверки подсвойства. Это должно быть легко сделать, проверив user.Name с помощью schema.properties.Name.

Проблема с простой проверкой подсвойства заключается в том, что некоторые части проверки не относятся к самому свойству. Например, в объекте выше может быть обязательный массив.

person fiddur    schedule 07.10.2014
comment
Хотя это может работать для некоторых схем, в целом это невозможно. Такие пункты, как oneOf или dependencies, означают, что изменения в одной части данных могут повлиять на совершенно другую область (включая удаление/добавление схем). - person cloudfeet; 07.10.2014