Надеемся перенести рабочие правила реализации jQuery Validator на JSONSchema - PullRequest
1 голос
/ 02 мая 2011

Я пытаюсь переместить существующую (и работающую) клиентскую схему проверки jQuery в JSONSchema, чтобы позволить себе проверять произвольный JSON как на клиенте, так и на сервере.

Мое приложение - это, по сути, кучагигантские формы со множеством сложной логики, определяющей, какие вопросы следует задавать, основываясь на ответе пользователя на другие вопросы.Каждая форма имеет более 200 полей.

Сейчас я занимаюсь только проверкой на стороне клиента, и это хорошо работает примерно в 99% случаев.В некоторых случаях возникали проблемы с браузером, но ничего страшного.При этом я хочу выполнить проверку на стороне сервера (!).

После прочтения черновика JSONSchema и просмотра некоторых реализаций v3 мне кажется, что я могу потерять некоторые из более сложных правил, которые моиприложение стало зависеть от.Я хочу быть уверен, что я что-то не упустил, прежде чем двигаться слишком далеко в любом направлении.

Некоторые примеры:

"Если x == 10, то требуется y,в противном случае это необязательно "

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

Я думаю, что это рассматривается в этой теме в списке JSONSchema .

"Если x = сегодняшняя дата, иy = завтрашняя дата, затем x> y "

Эта логика будет использоваться для обеспечения того, чтобы дата" с "предшествовала дате" до ".

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

Ближайшая вещь, которую я 'Установлено, что для удовлетворения вышеуказанных потребностей CERNY .

Если я лаю не на том дереве, пожалуйста, дайте мне знать.Я также рассмотрел запуск backbone.js как на клиенте, так и на сервере.

tl; dr;

Я хочу сохранить один набор правил проверки для большихи сложные формы и применять эти правила проверки к произвольным документам JSON как на стороне клиента, так и на стороне сервера.

1 Ответ

0 голосов
/ 31 января 2012

есть много трюков, но не все из них возможны. Например если x == 10, то y требуется, может быть достигнуто с помощью чего-то вроде (черновик 3):

"type":[
{"properties":{"x":{"enum":[10]}, "y":{"required":true}}},
{"properties":{"x":{"disallow":[{"enum":[10]}]}}}
]

Скажем, это возможно, но очень сложно ... схема в основном должна проверять структуру, а не ее содержимое (даже если свойств для этого немного)

Другой возможный способ, который мне лично нравится, - это «расширить» текущий граф проверки с помощью схемы на основе внешнего URL. Идея состоит в том, чтобы отправить параметры текущего документа по URL, который вернет соответствующую схему в соответствии с этими параметрами.

Пример:

{
"extends":{"$ref":"http://checkCustomValidity/{x}/{y}/"};
}

Где во время выполнения схема, отправленная обратно, может быть {"disallow":"any"}, если не разрешено, или {}, если нормально

Это полезно, так как URL-адрес может использоваться как на стороне клиента, так и на стороне сервера (ваш клиент не будет полностью автономным, но в некоторых случаях вы просто не сможете)

Реальное использование для этого в случаях, когда оно обязано использовать удаленный сервис. Например, если мне нужно проверить, используется ли мой никнейм на сервере уже при регистрации. Я кодирую серверный веб-сервис, отвечая на путь запроса: http://www.server.com/isNicknameUsed/{nickname}

...