Javascript 与编程语言无关的模型验证

Javascript 与编程语言无关的模型验证,javascript,ruby,validation,scala,architecture,Javascript,Ruby,Validation,Scala,Architecture,假设您在基础设施中使用几种不同的编程语言和框架来处理大量流量等 示例堆栈: 事件驱动的API服务器(使用Scala、node.js、Ruby EM) 标准的全栈webapp(如Rails) (可能有更多的技术) 当使用不同的语言和框架时,我通常会重复大多数模型验证,因为每个“客户入口点”都需要验证其输入。这当然是保持同步的痛苦 如果没有像CORBA这样的东西,您将如何处理这个问题?您最好的选择是一个框架,它允许您以与语言无关的格式(如JSON)指定模型验证。您可能最终会得到某种验证模式,例如:

假设您在基础设施中使用几种不同的编程语言和框架来处理大量流量等

示例堆栈:

  • 事件驱动的API服务器(使用Scala、node.js、Ruby EM)
  • 标准的全栈webapp(如Rails)
  • (可能有更多的技术)
  • 当使用不同的语言和框架时,我通常会重复大多数模型验证,因为每个“客户入口点”都需要验证其输入。这当然是保持同步的痛苦


    如果没有像CORBA这样的东西,您将如何处理这个问题?

    您最好的选择是一个框架,它允许您以与语言无关的格式(如JSON)指定模型验证。您可能最终会得到某种验证模式,例如:

    {
      "name": [
        {
          "validate": "length",
          "minLength": 6,
          "maxLength": 10
        },
        ...
      ],
      ...
    }
    
    然后,您将拥有可以解析此格式的特定于语言的验证器。验证器只需要编写一次,然后为每个模型维护一个模式


    然而,这听起来很像CORBA/SOAP/Thrift/ProtocolBuffers/等等。这是因为它们是为了解决这些类型的问题而编写的,如果您自己编写的话,您最终会重新发明一些轮子。

    要添加到@Nathan Ostgard的帖子中,XML、XSD以及必要时XSLT也可以工作。这样做的好处是a)XSD内置了简单的验证b)大多数语言对此都有很好的支持c)您不必用每种语言编写验证;模式中未处理的内容可以在XSLT中编写一次(注意XSLT实现往往会有所不同:)

    我将使用正则表达式的“字典”。 正则表达式受您统计的所有语言的支持,将它们的字符串表示形式从一种语言转换为另一种语言可以通过将表达式本身传递给正则表达式来完成

    据我观察,这比为每种语言编写一个解析和执行机制要少得多

    就像之前建议的那样-您可以以不可知的格式(如JSON)保存Reg EXP的“字典”。 这将重复工作的范围缩小到-

    • 您维护的验证表达式的一个源文件
    • 每种编程语言:
      • 将主文件转换为目标语言的格式
      • 薄机制
      • 阅读JSON
      • 从中选择已配置的检查
      • 处决他们
      • 边缘案例(如有)

    玩得开心:)

    如果你想完全验证,我会使用SOAP。至少,只要您有SOAP库,就只需要为它们提供接口的WSDL。

    您知道有哪些框架支持这种类型的验证定义吗?我认为这是个好主意。@tilleryj不幸的是,我没有。我做了一个快速搜索,没有找到任何。SOAP有点像做这类事情,但那是在接口级别,没有人喜欢SOAP。你的答案很好,但我无法抗拒——JSON代表JavaScript对象表示法,没有多少不可知性……@Bakudan——它可能是从JavaScript开始的——但它很早以前就突破了JavaScript的界限,成为了一种跨语言,跨平台通信协议。2016年,我在谷歌搜索时发现了这一点。我忘了提到Reg Exps的缺点-可读性低。尽管如此,我还是热情推荐。一旦你习惯了它-它非常快,强大和专业。