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

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

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

6148 次点击
所在节点    程序员
54 条回复
nekoneko
2022-12-26 11:26:30 +08:00
对, 让后端统一处理一下返回信息
JYii
2022-12-26 11:27:00 +08:00
当然是捕捉参数异常丢出去,你同事那直接就是懒得处理
liprais
2022-12-26 11:27:07 +08:00
直接报 java 错误是抛异常?
抛异常说明有问题,用户不应该看到你内部的异常
cai88112
2022-12-26 11:27:08 +08:00
你是对的
InDom
2022-12-26 11:27:23 +08:00
报错误一般就是真的没在入口做检测, 后面莫名其妙在某个地方没按预期运行崩了.
不过入口参数检查的时候,如果不符合预期也可以使用报错的方式反馈.

但是这两种还是可以分出来的 如果 每次都完全不同的错误就属于前者, 如果每次错误提示都很相似, 大概率是第二个了.
k9982874
2022-12-26 11:28:06 +08:00
直接爆堆栈就过分了,让后端加 validation
InHello
2022-12-26 11:29:08 +08:00
@liprais 抛异常的
wolfie
2022-12-26 11:29:26 +08:00
序列化错误怎么算?
int32 类型,传 abc 。
yatoooon
2022-12-26 11:29:40 +08:00
后端统一处理
wong2
2022-12-26 11:29:58 +08:00
400 而非 500
InDom
2022-12-26 11:30:53 +08:00
但是 如果是后者 属于 预期内的错误, 是可以以可以预期的方式提供错误信息(比如按照接口规范返回与前端沟通过的特定格式的数据)

而非直接给了一个前端不曾预料的返回内容, 所以,不管怎样,如果出现了这个不可预期的返回,就是后端的锅.
InHello
2022-12-26 11:31:51 +08:00
@wong2 code 直接报 500 ,message 报异常
dd991
2022-12-26 11:37:12 +08:00
后端提示什么,直接展示出来就好,老板会让他改的
unco020511
2022-12-26 11:40:10 +08:00
后端有框架可以很方便的校验参数有效性
AirBai2
2022-12-26 11:43:31 +08:00
http 状态码 400 ,外加 message
wangritian
2022-12-26 11:46:22 +08:00
你是指报异常吗?确实不对,应该报业务或框架层级的错误
bthulu
2022-12-26 11:52:56 +08:00
我一般是报 200, 数据返回默认值
lucays
2022-12-26 12:00:51 +08:00
总之报 500 肯定是有问题
200 还是 4xx 看公司内部规范。。。
wu00
2022-12-26 12:02:26 +08:00
参数错误,后端 validation+默认提示(给开发人员看的),前端自己也要做前端的 validation ,用户提示信息是前端自己定
业务错误,http 状态码 4xx ,给 errorType 和 message(给开发人员看的),前端根据 errorType 做页面逻辑和错误提示
服务端异常,http 状态码 500 ,前端给友好页面 /提示(稍后再试)
buchikoma
2022-12-26 12:04:24 +08:00
这种需要前后端定一下异常类型和异常提示,后端根据异常类型抛错误信息和 code ,前端根据 code 对错误信息进行包装抛给用户

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

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

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

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

© 2021 V2EX