
假设数据库有一个字段是 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 itechify PRO 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 AV1 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 不是不行,但是得特殊处理而且很不舒服 |