前端校验还是后端校验的问题

270 天前
 LuffyPro

RT,场景大致如下:

个人看法:

想知道大佬们处理这种场景的选择和原因,另外前端有相关组件(比如 vue )吗?谢谢大家回复。

3510 次点击
所在节点    程序员
37 条回复
lrh3321
269 天前
都做,后端的校验不能省。前端不校验的话,别怪到时候判断不出是哪个字段有问题。
wujianhua22
269 天前
1 、如果后端能够返回一定格式的校验结果数据,例如{"field1":"是必须项目","field2":"字符串长度必须大于 2"}等,这样你前端是可以使用异步校验,然后体现在画面上,那么你就可以不用写前端校验。但是一般来说,后端都不会这样返回。
2 、有一些情况下需要预校验,例如输入手机号后,就需要校验该手机号是否已经存在。那么也会用到前端异步校验。
3 、至于你说的更新的时候需要判断是否同一个手机号,这种一般判断是加上 [ID 主键] 和 [手机号] 一起判断,如果当前 Id 的手机号就是这个手机号,那就跳过,反之才去校验是否重复。
ZENGQH
269 天前
22 楼.3 正解
LuffyPro
269 天前
谢谢大家的回复,我看了下,大家好像都集中与前后端校验上,可能我问的方式不对。

我的本意是,前端表单项中,没有发送数据变动的表单项数据有没有必要在编辑时也一起提交上来,打个比方,一个表单中有手机号码和名字,这时候只改了名字,手机号码没改,在提交时,有没有必要把没发生变化的手机号码也一起通过接口提交上来。

因为如果没变化的手机号码也提交上来,并且手机号码必须确保唯一性,后端在校验号码唯一性时,除了判断手机号码是否已经被注册,还得再判断一遍是否等于当前用户的手机号码( true 的话支持继续修改),后面这个是否等于自己的手机号码的判断是因为前端把没有变化的手机号码也提交上来的,如果约定,数据不发生变化时不需要提交,那后端就只要判断该手机号码是否被注册就行了。

感觉 15 楼明白我在说什么。 @old9
Iakihsoug
269 天前
都校验,双方做校验的目的不一样,不是同一件事
Iakihsoug
269 天前
@LuffyPro 这个其实应该算作产品设计上的问题,个人经验来说,特殊规则的编辑通常会单独做功能,而不是跟其他信息表单一起,比如手机号会有单独的修改手机号、图形验证和短信验证
其他的信息一般都是校验后全量发到后端,否则如何判断用户是想要清空某个字段还是不修改呢? null?
johnhuangemc2
269 天前
最佳实践是变了什么字段提交什么字段, 这样引发的问题最少, 比如说敏感字段脱敏展示.
但一般这个不属于功能性需求, 产品不会提, 前端或后端单方面提出的话另一方不一定会配合.
aababc
269 天前
@LuffyPro 如果是 restful 那么就通过不同的行为来区分 put/patch/post ,比如可以使用 patch 来提交部分更新。
zdkk
269 天前
都校验
wqhui
269 天前
提交的所有内容都校验,或者最起码后端要把关键字段验了,不然别人直接调接口给你搞一堆乱七八糟的东西
montaro2017
269 天前
你的意思是修改的时候未修改的内容是否要一并提交
建议是都提交
1 是前端需要针对每个 input 进行监听比较是否修改,可能存在漏 input 的情况导致有的数据修改时候没提交上去
2 是后端要对数据进行校验,如果未修改内容不提交,校验前得先判断是否为 null ,以 java 为例一般用 hibernate 注解来校验,如果为 null 就不太好用注解,得手动校验
Arrowing
269 天前
并没有冲突,前端校验是为了体验,后端校验是为了安全
66beta
269 天前
这有啥好抬杠的,前端可以不做,后端不能不做
RRRSSS
269 天前
后端为了安全一定要做

前端为了用户体验好,可以做

就这么简单


-----

回到你的场景,前端什么都不用管啊,直接把这个表单所有字段发出去,这个 api 是 edit 功能,其实就是 UPDATE 操作,没什么了不得的。

当然,你说的校验手机是否重复这种情况,对于后端开发,可校验,可不校验,看是什么系统,有没有特别的需求。

但是,作为前端,是可以在提交之前告诉用户手机号是重复的。
zhaogaz
269 天前
校验问题应该没啥可说的了。

但是我觉得你可能问的是一个业务逻辑问题。
一般清晰一点的业务,会把你这两个不同的修改拆开,姓名随便改;但是手机号修改逻辑稍微复杂一些,可能会单独去梳理这部分业务逻辑。在我看来是一个简单业务和复杂业务做一起了

你现在困惑是,并且产品经理没有对细节做要求,你在不停地用业务逻辑给产品的不作为兜底。但是你不知道对不对。同时你的描述过于细节,让这帮程序员也陷入校验细节中。。。
Al0rid4l
269 天前
@LuffyPro 你这里认为的没有变化, 理解没错的话是前端视角认为的没有变化, 问题是, 前端认为的没有变化, 到了后端也可能有了变化...
credo123
268 天前
各干各的.
后端必须效验. 前端也要效验.
不冲突. 前后端要互不信任.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1043073

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX