Валидирайте един атрибут на обект с помощта на json схема

В момента използвам tv4 (валидатор на json-schema) за валидиране (от страна на клиента) на обект с json-схема, която работи доста добре.

Но когато променям една стойност на атрибут, искам тази стойност да е единствената, която трябва да бъде валидирана.

Например имам потребител:

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

И схемата:

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

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

Причина: Когато имам голям обект (с подмодели и т.н.), той ще потвърди всички свойства. И не знам дали това ще е проблем с производителността (някой ден...).

  • Това възможен ли е случай с валидиране на схема?
  • Или има по-добри начини за валидиране на обекти?

Използвам AngularJS btw.

Най-добри пожелания и благодаря.


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


Отговори (2)


Нямате проблем с производителността, докато нямате проблем с производителността. :)

Няма техническа причина такъв валидатор за частична актуализация да не съществува (знам поне за един, но не е точно бърз). Има и по-бързи валидатори „от нулата“ (някои с бенчмаркове), включително някои с много подобни API/доклади за грешки, така че ако в бъдеще започнете да виждате проблеми с производителността, можете да превключите без много шум.

Въпреки това, като се има предвид, че това се случва от страна на клиента (така че нямате проблеми с мащабирането с повече потребители), аз все още не бих се тревожил за това.

person cloudfeet    schedule 06.10.2014
comment
Благодаря, помогна ми много! :) - person DevTrong; 07.10.2014
comment
Полезно е, ако използвате PATCH или sub 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