为什么JOI比AJV更受欢迎?

tka*_*lis 3 javascript validation jsonschema joi ajv

我正在决定一个可用于客户端和服务器端验证的验证库。我一直在比较JOI(+ joi-browser)和AJV。

据我了解,JOI和AJV可以完成相同的任务。AJV甚至可以执行异步验证,而JOI无法做到。看来AJV也可以验证以标准化格式编写的JSON模式,这很方便,但是它不像JOI那样对开发人员友好。

JOI的明星和贡献者是AJV的两倍多。

为什么JOI的受欢迎程度是AJV的两倍?

Jas*_*ers 20

这个问题可能会因为主要基于观点而封闭,但是我对此有话要说,所以我还是要回答这个问题。

AJV和Joi之间的重要区别在于AJV是JSON模式验证器,而Joi是JavaScript验证器。JSON Schema是跨平台的,而Joi仅适用于JavaScript。因此,这不是在AJV和Joi之间进行选择,而是在JSON Schema和Joi之间进行选择。

每种方法都有其取舍,因此您选择哪种方法在很大程度上取决于您的具体情况。

AJV / JSON模式

您从JSON模式获得的最大好处是它是跨平台的。每种主要编程语言中都存在JSON模式验证器实现。无论选择哪种语言,都可以在前端和后端使用相同的JSON模式,并获得一致的验证结果。编写一次,在任何地方验证。

缺点是,由于它是跨平台的,因此在功能上也有所限制。它刻意保持足够简单,因此在任何编程语言中实现起来都不会太困难。由于JSON Schema不是完整的编程语言,因此它的功能受到限制。

如果您在后端使用的不是JavaScript,或者您的应用程序是公共API,并且可以被任何数量的应用程序以各种语言使用,则可以选择AJV / JSON Schema。

i

Joi的最大优势是可用性。它易于使用,易于扩展,并且具有JavaScript的全部功能。

缺点是,如果您想在前端后端重用验证逻辑则后端上的唯一语言选择是node。

如果您将JavaScript用于前端和后端,并且不期望需要支持的非JavaScript客户端,则可以选择Joi。这是一个相当狭窄的情况,但是如果是您的情况,那么您可能会比AJV / JSON Schema受益更多。

人气度

Github明星不是人气的重要指标。如果查看npm的每日下载量,您会看到一个截然不同的故事(AVJ:18.9M,Joi:2.2M)。到目前为止,JSON模式已被广泛使用,因为它是跨平台的。AVJ只是一种语言的一种实现。但是,如果您的开发堆栈适合Joi的特定领域,那么它可以是比JSON Schema更好的选择。

  • 我将举三个例子,说明你不能用 JSON Schema 做的事情。(1) 您不能将一个值与另一个值进行比较。你不能强制`#/minWeight` 小于`#/maxWeight`。(2) 你不能比较日期。JSON Schema 只识别 JSON 类型。这不包括日期。日期表示为字符串。因此,您不能强制执行最小或最大日期。(3) 您不能引用外部源,例如数据库或 Web 服务。在社交媒体应用程序中,当您将朋友添加到您的网络时,您可能希望强制添加的朋友确实存在于您的系统中。 (9认同)
  • 回复:JSON 架构限制。AJV 通过自定义功能和自定义插件解决了大部分限制,但是当您使用这些自定义功能时,您会失去与其他 JSON Schema 库的互操作性,从而失去首先选择 JSON Schema 的全部意义。 (3认同)