假设数据库有一个字段是 int 型可空,接口返回参数时该字段数据可能是 1,2,3,也有可能是 null。 这时候你们是返回 null 还是 ""
1
hstdt 2020-03-13 19:25:42 +08:00 via iPhone
具体情况具体分析呗,json 的话传 0 或者这个字段不传也可以吧,别来个字符串捣乱就行
|
3
imherer 2020-03-13 19:33:09 +08:00
null 或""都可以呗,协商好就行了
不过我更倾向于 null |
4
lscho 2020-03-13 19:46:21 +08:00 via iPhone
可空肯定要传 null 啊。。。int 型不要给空字符串
|
5
rosu 2020-03-13 19:54:48 +08:00 via iPhone
1 楼和 3、4 产生了截然相反的回答😹。
首先一定要协商好,形成规范。另一个如果前段是 web,可能 null、“” 或 不传问题都不大。因为 js 是弱类型。 如果前段是 App,尽量就不要类型混用了。接口是 int 就不要返回字符串。因为你说了 0 和 null 意义不同,那假设这个接口开发之初就有此业务需求,意味着 App 只能用 String 或 object 来接了。 但是如果是接口后期升级,那还是协商前端升级版本做变更。 |
7
janxin 2020-03-13 20:02:20 +08:00
传 null,方便非 JS 语言处理
|
8
oneisall8955 2020-03-13 20:03:51 +08:00 via Android
JAVA 来说,肯定 Null,不然反序列化属性类型对不上
|
9
zhuisui 2020-03-13 20:12:16 +08:00
首先该字段类型为 int,就肯定不能传 ''
然后如果要表示为空值,那肯定是 null。由于 0 已经被占用了,说明它的意义不是空。 如果不传<=>undefined,在序列化的时候(如 json 或 protobuf )这个键就会被去掉,也就不能看出是空的含义。 双方约定更应该靠向遵守一般程序接口设计规范,而不是私下约定。 |
10
optional 2020-03-13 20:14:56 +08:00
传 null, 加上 json-schema 校验, 通不过就说明后端偷偷改了 api,线上 bug 就背锅。
|
11
celeron533 2020-03-13 20:25:44 +08:00
医学影像 DICOM 是这么做的:
数据 null:返回空数组 数据有值:返回只有一个值的数组,且 int[0]=value |
12
hantsy 2020-03-13 20:26:44 +08:00
直接去掉,省数据流量
|
13
noobma 2020-03-13 20:54:26 +08:00
菜鸡前端表示,还是 null 好,比如 ts 里面定义 null | number 和 string | number,那肯定是 null | number 一眼就能看得出是啥意思😎
|
14
xiaoming1992 2020-03-13 20:59:31 +08:00 via Android
或者-1 也行啊
|
15
des 2020-03-13 21:09:43 +08:00
我们用-9999
|
16
blessyou 2020-03-13 21:17:13 +08:00 via Android
空值字段都不给😂
|
17
luopengfei14 2020-03-13 21:41:22 +08:00 via iPhone
连 null 也不传,省流量,装逼中( ̄~ ̄;)
|
18
hstdt 2020-03-13 22:36:14 +08:00 via iPhone
@Pursue9 限制这么多,那就还是传 null 吧。我是被人用"null"坑过几次的,所以一般不想这么推荐,但是这个确实是标准答案😹
|
19
Pursue9 OP |
20
Pursue9 OP 我们这边全转字符串了, 返回
```json {"status1":"-1","status2":"1","status3":"0","status4":""} ``` 用起来就非常奇怪 |
21
Mohanson 2020-03-13 22:54:17 +08:00 via Android
标准答案是用零值代替空值。Null 的发明者,图灵奖获得者在 2009 年公开承认它是一个百万美元的错误。
"Null reference, the billion dollar mistakes" |
24
DOLLOR 2020-03-13 23:23:38 +08:00
传 null 吧,至少这个值不用额外做约定,就知道它是一个无效的值。
|
26
xiaoming1992 2020-03-14 00:13:41 +08:00 via Android
@Pursue9 业务上做好条件判断就行了
|
27
baobao1270 2020-03-14 00:14:47 +08:00 via Android
如果返回"1,2,3" 传""
如果返回[1, 2, 3] 传[] 如果是可能返回 1,可能返回 2,可能返回 3…… 传 null |
28
kidtest 2020-03-14 00:20:20 +08:00
我宁愿传-1,代表不合法的值
|
29
strongcoder 2020-03-14 00:26:26 +08:00
传啥都行 APP 解析做好了所有不信任后端的行为
|
30
xuanbg 2020-03-14 07:44:32 +08:00
对于值来说,是什么就传什么,转换来转换去的,万一没转换对或者转换后产生歧义就不好了。前端凭啥就不用判空,脸大吗?
另外,对于数组来说,没有数据不应该是 null,应该是一个空数组。 |
31
pomelotea2009 2020-03-14 09:52:32 +08:00 via Android
null
|
32
IvanLi127 2020-03-14 10:12:27 +08:00 via Android
正常情况下用 null,这个没什么好纠结的,感觉没必要约定一个特殊值,null 一般情况下就能满足。
|
33
littlefatpaper 2020-03-14 11:42:17 +08:00
赞同 5 楼,分情况,业务主要设计 Web 端,传 null 没问题,
但是如果有移动端的,最好不要用 null,我 iOS 的同事好像和我说过他们处理 null 值会有问题,具体记不清了,好像要改构造报文的方法才能传 null,安卓的同事也说传 null 不规范。 我们还是看业务场景来的,主要是沟通好规范,并且还要考虑到后面一些可能会涉及到的场景,例如有些业务如果是传温度数值的,默认传 0,-1 之类的肯定不行,传-9999 (一个不可能出现的值)或者 null 沟通好规范就行了 |
34
littlewing 2020-03-14 12:34:21 +08:00 via iPhone
数据库不允许存 NULL
|
35
Freeego 2020-03-14 13:11:16 +08:00
数据库非空有默认值就传默认值 l,数据库可空就传 null,到底非不非空要看这个字段是干嘛的。
|
36
wangyzj 2020-03-14 13:11:30 +08:00
给一个默认值啊
0,-1 传空可以 传 null 不是不行,但是得特殊处理而且很不舒服 |