重要的区别是,AJV 是 JSON Schema 验证器,Joi 是 JavaScript 验证器。JSON Schema 是跨平台的,而 Joi 只在 JavaScript 中有效。所以,这不是 AJV 和 Joi 之间的选择,而是 JSON Schema 和 Joi 之间的选择。
每种方法都有其权衡,因此您的选择很大程度上取决于您的特定情况。
AJV/JSON Schema
从 JSON Schema 中获得的重大收益是它是跨平台的。JSON Schema 验证器实现存在于每种主要编程语言中。无论您选择哪种语言,都可以在前端和后端使用相同的 JSON Schema,并获得一致的验证结果。一次编写,随处验证。
缺点是,由于它是跨平台的,它在能力方面也有些局限性。它被故意保持足够简单,以便在任何编程语言中实现它不会太困难。因为 JSON Schema 不是一个完整的编程语言,所以它在功能上有限制。
如果您在后端使用其他语言或您的应用程序是可由任何数量的语言中的任何数量的应用程序使用的公共 API,则可能会选择 AJV/JSON Schema。
Joi
Joi 的最大优势是其易用性。它易于使用,易于扩展,并且具有 JavaScript 的全部功能。
缺点是,如果你想要在前端和后端复用验证逻辑,那么你只能在后端使用node语言。
如果你在前端和后端都使用JavaScript,并且不预计需要支持非JavaScript客户端,那么你可以选择Joi。尽管这种情况比较狭窄,但如果正是你的情况,你可能会从Joi中获得更多,而不是AJV/JSON Schema。
流行度
Github星数并不能很好地衡量受欢迎程度。如果你查看npm每日下载量,你会看到一个非常不同的故事(AJV:1890万,Joi:220万)。JSON Schema由于跨平台,因此被广泛使用。AJV只是一个语言中的一种实现。但是,如果你的开发堆栈符合Joi的特定领域,它可以成为与JSON Schema同样甚至更好的选择。
#/minWeight
小于#/maxWeight
。(2) 您无法比较日期。JSON Schema 只能识别 JSON 类型,而这不包括日期。日期被表示为字符串。因此,您无法强制进行最小或最大日期检查。(3) 您无法引用外部源,例如数据库或 Web 服务。在社交媒体应用中,当您添加好友到您的网络时,您可能想强制执行已添加好友实际上存在于您的系统中。 - Jason Desrosiers