请教一下,你们写接口的时候如果传入参数不合法,返回的结果是直接提示参数非法还是报错?

2022-12-26 11:22:09 +08:00
 InHello

比如有一个查询车辆详情的接口,参数定义的是车牌号,但是我做接口测试可能会传入纯数字、英文、null 等等这些正常参数外的其他字符。 我司返回来的结果直接报 java 错误,在我的理解中如果参数非法,返回的接口应该是提示用户"参数非法"而不是直接报一个 java 错误,不知道对不对。

6667 次点击
所在节点    程序员
54 条回复
Seayon
2022-12-26 22:28:33 +08:00
基于 Spring 和 Hibernate Validation 的全局参数统一校验,Spring Boot 参数校验
https://blog.csdn.net/Seayonzhao/article/details/118419116
nanjingwuyanzu
2022-12-26 23:05:11 +08:00
后端这也太懒了吧
aru
2022-12-27 07:53:20 +08:00
@devswork 我就说一句,新能源车牌是 8 位
netabare
2022-12-27 08:29:29 +08:00
感觉应该区分「输入 /输出数据不合法」和「程序内部状态错误」吧。

在我的理解里,一个程序应该是只对特定的输入有效,产生期待中的输出,对于这以外的其他输入,应该直接拒绝运行,避免产生意想不到的结果。

在后端里面,这个逻辑应该可以等价于……一个大的事件循环在监听外部的请求,首先检测请求的有效性,对于有效的请求,开始执行这个程序(启动线程、调用服务之类的),
netabare
2022-12-27 08:33:03 +08:00
如果请求内容无效,直接返回错误报告。

然后…在后端程序里面,毕竟无法保证程序状态永远正确,所以需要用异常来检查和保证程序尽量正确运行。

唔,我倒是没怎么写过后端,但是我对程序的理解是这样。感觉重要的还是如何保证请求的内容健康有效这一个环节,当然可用的工具也很多就是了。

至于随地抛异常,我是反对的,因为异常意味着程序状态发生了不正常的情况,即使可以在上层捕获,这种用法给人的感觉就像用异常处理 NPE 一样(
dengji85
2022-12-27 08:59:19 +08:00
我就不做后端校验的,只做前端校验,因为时间不够,能用就行
wupher
2022-12-27 10:41:11 +08:00
你的理解没错。

后端永远不应依赖于前端校验。正则表达式校验一下车牌号,如果不会写,还可以询问 ChatGpt 。

像这样写代码,能用。但一旦到了运营环境中,出现故障想要溯源,日志中到处都是异常栈,会很难追溯。
shm7
2022-12-27 10:45:24 +08:00
抛出特定类型的参数非法错误,外部错误处理机制返回 参数非法提示信息。
daliusu
2022-12-27 11:07:59 +08:00
肯定也不能直接抛出内部错误
可以约定抛出一个 400 错误,携带一个 errorMsg:"xxxx",然后再带个参数来描述需不需要前端弹出提示,比如 talkError:true ,这样前端在接口响应层直接拦截就可以自己写错误提示样式,具体错误信息后端返回,框架一般都自带这种功能
devswork
2022-12-27 16:45:34 +08:00
@aru 只是 validation 用法举个例子,不要在意细节
zypy333
2022-12-27 20:03:01 +08:00
@zsj1029 我不理解这种写法居然还能有人赞同,数据库查不到结果就返回空就行了,抛个错是几个意思
hellojukay
2022-12-28 14:24:00 +08:00
直接返回 4xx , 但是不要直接提示 "xxx 参数不合法“,对于系统入侵者来说,这样的提示是一个指示牌,告诉他们怎么入侵系统。
ma836323493
2022-12-28 15:47:22 +08:00
前端都不做校验我后端做什么校验
SACKJJKLL
2022-12-29 16:00:14 +08:00
参数后端校验,后端写个 wrapper 抛出或者直接 java 抛异常

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

https://ex.noerr.eu.org/t/904703

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

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

© 2021 V2EX