validation - 如何同步客户端验证和服务器端验证?

标签 validation architecture client-server

通常,在编写 Web 应用程序时,我们希望在客户端执行验证以提供即时反馈,并在服务器端执行验证以确保数据完整性和安全性。但是,客户端浏览器应用程序通常是用 JavaScript 编写的。服务器端可以用 Java、Php、Ruby、Python 和许多其他语言编写。当服务器端由 node.js 之类的东西支持时,在客户端和服务器上重用相同的验证代码真的很容易,但是如果服务器端基于 Rails 或 Django(或任何其他您可以命名的框架) ),确保验证代码保持同步的最佳方法是什么?必须用多种语言重新实现相同的代码似乎有点多余。

最佳答案

如果您牢记以下观点,重复某些验证似乎是可以的。

让我们将验证分为两部分。 A) 业务验证,例如“如果选中复选框 Y,则字段 X 中的金额应大于 500 美元” B) 基本数据验证,例如数据类型检查、空检查等(我们可能会争论每个验证都是业务验证,但这纯粹是特定于上下文的)。

A类:它是您业务逻辑的一部分,应仅保留在服务器端。

B类:这种类型的验证是放置在客户端的潜在候选者。但请记住,浏览器端验证 can be bypassed .这并不意味着您根本不应该在浏览器端进行验证,但此类验证应仅被视为节省来自服务器的网络往返的奖励。服务器必须重新执行这些验证。

简而言之,不应将验证视为跨层可重用代码的单元。他们的目标各不相同,应该允许冗余。

希望这可以帮助。

关于validation - 如何同步客户端验证和服务器端验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8557968/

相关文章:

multithreading - 实现 token 缓存

c 中的客户端/服务器套接字

objective-c - 在 Objective-C 中模拟多重继承

路由器后面的 Python 客户端/服务器

javascript - 表单提交有错误

forms - 对一组复选框使用 HTML5 "required"属性?

javascript - 使用 JavaScript 即时验证电子邮件输入

java - java中的txt文件格式验证

java - 领域驱动设计——CQRS + ES的使用

c - 架构冲突?在 mac 上找不到体系结构 x86_64 的符号