关于接口传 null 的问题,你们是怎么解决的?

2020-03-13 19:22:42 +08:00
 Pursue9

假设数据库有一个字段是 int 型可空,接口返回参数时该字段数据可能是 1,2,3,也有可能是 null。 这时候你们是返回 null 还是 ""

5826 次点击
所在节点    程序员
36 条回复
Mohanson
2020-03-13 22:54:17 +08:00
标准答案是用零值代替空值。Null 的发明者,图灵奖获得者在 2009 年公开承认它是一个百万美元的错误。

"Null reference, the billion dollar mistakes"
iamwho
2020-03-13 23:02:28 +08:00
@Mohanson #21

剩下的九亿九千九百万给我吧。(doge
night98
2020-03-13 23:19:17 +08:00
@Mohanson #21 那还不如用-1 呢,-1 好歹能表示这是一个业务中不存在的数据
DOLLOR
2020-03-13 23:23:38 +08:00
传 null 吧,至少这个值不用额外做约定,就知道它是一个无效的值。
noreplay
2020-03-13 23:34:27 +08:00
@iamwho 你要为剩下的那么多埋单啊(逃
xiaoming1992
2020-03-14 00:13:41 +08:00
@Pursue9 业务上做好条件判断就行了
baobao1270
2020-03-14 00:14:47 +08:00
如果返回"1,2,3" 传""
如果返回[1, 2, 3] 传[]
如果是可能返回 1,可能返回 2,可能返回 3…… 传 null
kidtest
2020-03-14 00:20:20 +08:00
我宁愿传-1,代表不合法的值
strongcoder
2020-03-14 00:26:26 +08:00
传啥都行 APP 解析做好了所有不信任后端的行为
xuanbg
2020-03-14 07:44:32 +08:00
对于值来说,是什么就传什么,转换来转换去的,万一没转换对或者转换后产生歧义就不好了。前端凭啥就不用判空,脸大吗?

另外,对于数组来说,没有数据不应该是 null,应该是一个空数组。
pomelotea2009
2020-03-14 09:52:32 +08:00
null
IvanLi127
2020-03-14 10:12:27 +08:00
正常情况下用 null,这个没什么好纠结的,感觉没必要约定一个特殊值,null 一般情况下就能满足。
littlefatpaper
2020-03-14 11:42:17 +08:00
赞同 5 楼,分情况,业务主要设计 Web 端,传 null 没问题,
但是如果有移动端的,最好不要用 null,我 iOS 的同事好像和我说过他们处理 null 值会有问题,具体记不清了,好像要改构造报文的方法才能传 null,安卓的同事也说传 null 不规范。

我们还是看业务场景来的,主要是沟通好规范,并且还要考虑到后面一些可能会涉及到的场景,例如有些业务如果是传温度数值的,默认传 0,-1 之类的肯定不行,传-9999 (一个不可能出现的值)或者 null 沟通好规范就行了
littlewing
2020-03-14 12:34:21 +08:00
数据库不允许存 NULL
Freeego
2020-03-14 13:11:16 +08:00
数据库非空有默认值就传默认值 l,数据库可空就传 null,到底非不非空要看这个字段是干嘛的。
wangyzj
2020-03-14 13:11:30 +08:00
给一个默认值啊
0,-1
传空可以
传 null 不是不行,但是得特殊处理而且很不舒服

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

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

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

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

© 2021 V2EX