【问题标题】:Avoiding duplication of validation code at Javascript frontend and Java backend?避免在 Javascript 前端和 Java 后端重复验证代码?
【发布时间】:2015-11-11 10:31:23
【问题描述】:

我们有一个标准的 Web 应用程序,前端使用 Angular,后端是用 Java 7 编写的。我注意到,我们得到了很多重复的代码。也就是说,验证是通过 Angular 在客户端执行的,但我不能完全信任他,因为用户可以禁用客户端验证,只需向服务器提交一个 post 查询。

因此,我必须在 Java 的服务器端重复相同的验证逻辑。这很乏味,但我不知道如何避免这种情况。也许我可以用javascript框架(假设它是Node.js)编写后端的某些部分,它可以使用与前端相同的验证库,并使Java后端与node.js交互?解决此问题的最佳方法是什么?

【问题讨论】:

  • 这意味着你有 2 个后端?有没有想过微服务之类的东西?
  • 不确定。也许Java可以以某种方式使用javascript库来执行验证?也许您可以根据后端验证代码生成 javascript 验证代码,反之亦然?
  • Java 与 Javascript 无关,真的。只在前端做最少的检查(基本类型/长度验证),在后端做数据库检查和更深入的检查。
  • 我同意 Andrius,所有的验证都必须在服务器端进行,除了一些基本的事情
  • @Andrius,从技术角度完全同意 - 在后端编写所有验证代码更便宜,但由于前端验证,您可以为用户提供更无缝的 UX。因此需要共享逻辑是合理的。

标签: java angularjs node.js validation


【解决方案1】:

Java 可以运行 JavaScript 代码和其他动态脚本语言。在 Java 7 中,JavaScript ScriptEngine 称为 Rhino,在 Java 8 中称为 Nashorn。

Java 7 的 Oracle Java 脚本程序员指南: https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/

也许您可以在 js 文件中编写纯 JavaScript,您可以将这些文件放在后端为客户端服务并在服务器中执行。

【讨论】:

    【解决方案2】:

    AngularBeans 框架允许您在 java 端定义 BeanValidation 并转换为角度表单验证,因此代码不会重复。查看this文章中的使用示例。

    【讨论】:

      【解决方案3】:

      例如,将验证规则定义为 JSON 格式的数据,并通过公开数据的同一 API 中的端点公开它们。现在验证规则是公开的,任何其他服务都可以使用一些库来验证数据,这些库可以解析规则并接受/拒绝提交的数据(即来自表单)。

      【讨论】:

      • 你有什么框架或规则格式的例子吗?
      • JSON-Schema 是一种不错且相当全面的声明式验证格式。尽管它是声明性的,但您可以非常花哨 - 键和值的正则表达式验证、最小值/最大值、枚举、类型类、可区分联合、依赖项等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多