我正在确定可用于客户端和服务器端验证的验证库。我一直在比较JOI(+ joi-browser)和AJV。
据我了解,JOI和AJV可以完成相同的任务。 AJV甚至可以执行异步验证,而JOI无法做到。看来AJV也可以验证用standardized format编写的JSON模式,这很方便,但是它不像JOI那样对开发人员友好。
为什么JOI的受欢迎程度是AJV的两倍?
答案 0 :(得分:3)
这个问题可能会因为主要基于观点而封闭,但是我对此有话要说,所以我还是要回答它。
AJV和Joi之间的重要区别在于AJV是JSON模式验证器,而Joi是JavaScript验证器。 JSON Schema是跨平台的,而Joi仅适用于JavaScript。因此,这不是在AJV和Joi之间进行选择,而是在JSON Schema和Joi之间进行选择。
每种方法都有其取舍,因此您选择哪种方法在很大程度上取决于您的具体情况。
AJV / JSON架构
从JSON Schema获得的最大好处是它是跨平台的。每种主要编程语言中都存在JSON模式验证器实现。无论选择哪种语言,都可以在前端和后端使用相同的JSON模式,并获得一致的验证结果。写一次,在任何地方验证。
缺点是,由于它是跨平台的,因此它在功能上也有所限制。它刻意保持足够简单,因此在任何编程语言中实现起来都不会太困难。由于JSON模式不是一种成熟的编程语言,因此它的功能受到限制。
如果您在后端使用的不是JavaScript,或者您的应用程序是一个公共API,可以被任何数量的应用程序以各种语言使用,则可以选择AJV / JSON架构。
乔
Joi最大的优势是它的可用性。它易于使用,易于扩展,并且具有JavaScript的全部功能。
缺点是,如果您想在前端和后端重用验证逻辑,则后端上唯一的语言选择是node。
如果您将JavaScript用于前端和后端,并且不希望使用需要支持的非JavaScript客户端,则可以选择Joi。这是一个相当狭窄的情况,但是如果您是这种情况,那么您可能会比AJV / JSON模式获得更多的收益或Joi。
受欢迎程度
Github明星并不是衡量人气的好方法。如果查看npm的每日下载量,您会看到一个截然不同的故事(AVJ:18.9M,Joi:2.2M)。到目前为止,JSON模式已被广泛使用,因为它是跨平台的。 AVJ只是一种语言的一种实现。但是,如果您的开发堆栈适合Joi的特定领域,那么它可以是比JSON Schema更好的选择。