Почему JOI более популярна, чем AJV?

Я выбираю библиотеку проверки, которую я могу использовать для проверки как на стороне клиента, так и на стороне сервера. Я сравнивал JOI (+ joi-browser) и AJV.

Насколько я понимаю, JOI и AJV могут выполнять одни и те же задачи. AJV может даже выполнять асинхронную проверку, тогда как JOI не может. Похоже, что AJV также проверяет схему JSON, написанную в стандартизованном формате, что удобно, но не как разработчик дружелюбный, как инструкция по дрочке.

JOI имеет вдвое больше звезд и участников, чем AJV.

Почему JOI в два раза популярнее AJV?


person tkalis    schedule 17.01.2019    source источник


Ответы (1)


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

У каждого подхода есть свои компромиссы, поэтому выбор во многом зависит от вашей конкретной ситуации.

Схема AJV / JSON

Большой выигрыш, который вы получаете от схемы JSON, заключается в том, что она кроссплатформенная. Реализации валидатора схемы JSON существуют на всех основных языках программирования. Независимо от того, какой язык вы выберете, вы можете использовать одну и ту же схему JSON во внешнем и внутреннем интерфейсе и получить согласованные результаты проверки. Напишите один раз, подтвердите где угодно.

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

Вы можете выбрать схему AJV / JSON, если вы используете что-то другое, кроме JavaScript на бэкэнде, или ваше приложение представляет собой общедоступный API, который может использоваться любым количеством приложений на любом количестве языков.

Дзёи

Самым большим преимуществом Joi является удобство использования. Его легко использовать, легко расширять и в нем есть все возможности JavaScript.

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

Вы можете выбрать Joi, если используете JavaScript для интерфейса и серверной части и не ожидаете клиентов, отличных от JavaScript, которые вам необходимо поддерживать. Это довольно узкая ситуация, но если это ваша ситуация, вы, скорее всего, получите больше или Joi, чем AJV / JSON Schema.

Популярность

Звезды Github - не лучший показатель популярности. Если вы посмотрите на ежедневные загрузки npm, вы увидите совсем другую историю (AJV: 18,9 млн, Joi: 2,2 млн). Схема JSON используется гораздо более широко, потому что она кроссплатформенная. AJV - это всего лишь одна реализация на одном языке. Но если ваш стек разработки соответствует конкретной нише Joi, он может быть таким же хорошим выбором или лучшим выбором, чем JSON Schema.

person Jason Desrosiers    schedule 17.01.2019
comment
@Jason Спасибо, очень информативно! Вы упомянули, что схема AJV / JSON ограничена в возможностях. Не могли бы вы прояснить, что вы имеете в виду? Насколько я понимаю, при проверке объекта на соответствие схеме вы можете выполнять многие из тех же вещей с помощью AJV (схема JSON) и Joi (преобразовывая схему JSON в схему Joi). Поскольку у AJV и Joi есть возможность создавать собственные валидаторы, выполнять условную и вложенную валидацию, а также все стандартные функции валидации. - person tkalis; 17.01.2019
comment
@Jason Кроме того, когда вы говорите, что можете выбрать схему AJV / JSON, если вы используете что-то другое, кроме JavaScript, AJV является валидатором схемы JSON для Javascript, поэтому я считаю, что это утверждение вводит в заблуждение. Я думаю, вы имеете в виду возможность проверки схем json на любом языке . Это верно? - person tkalis; 17.01.2019
comment
Re: Ограничения схемы JSON. AJV обходит большую часть этих ограничений с помощью настраиваемых функций и настраиваемых плагинов, но когда вы используете эти функции настройки, вы теряете совместимость с другими библиотеками схемы JSON и, таким образом, теряете весь смысл выбора схемы JSON в первую очередь. - person Jason Desrosiers; 17.01.2019
comment
Я приведу три примера того, чего нельзя делать со схемой JSON. (1) Вы не можете сравнивать одно значение с другим. Вы не можете добиться того, чтобы #/minWeight было меньше #/maxWeight. (2) Вы не можете сравнивать даты. Схема JSON распознает только типы JSON. Это не включает даты. Даты представлены в виде строк. Следовательно, вы не можете установить минимальную или максимальную дату. (3) Вы не можете ссылаться на внешний источник, такой как база данных или веб-сервис. В приложении социальной сети, когда вы добавляете друга в свою сеть, вы можете захотеть обеспечить, чтобы добавленный друг действительно существовал в вашей системе. - person Jason Desrosiers; 17.01.2019
comment
Re: вводящее в заблуждение заявление. Извините, это определенно сбивает с толку. Да, я имею в виду возможность проверять схемы JSON на любом языке. - person Jason Desrosiers; 17.01.2019