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

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

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

5826 次点击
所在节点    程序员
36 条回复
hstdt
2020-03-13 19:25:42 +08:00
具体情况具体分析呗,json 的话传 0 或者这个字段不传也可以吧,别来个字符串捣乱就行
Pursue9
2020-03-13 19:27:24 +08:00
@hstdt 假设 0 已经被定义了,0 和 null 意义不同;该字段不可不传
imherer
2020-03-13 19:33:09 +08:00
null 或""都可以呗,协商好就行了

不过我更倾向于 null
lscho
2020-03-13 19:46:21 +08:00
可空肯定要传 null 啊。。。int 型不要给空字符串
rosu
2020-03-13 19:54:48 +08:00
1 楼和 3、4 产生了截然相反的回答😹。

首先一定要协商好,形成规范。另一个如果前段是 web,可能 null、“” 或 不传问题都不大。因为 js 是弱类型。

如果前段是 App,尽量就不要类型混用了。接口是 int 就不要返回字符串。因为你说了 0 和 null 意义不同,那假设这个接口开发之初就有此业务需求,意味着 App 只能用 String 或 object 来接了。

但是如果是接口后期升级,那还是协商前端升级版本做变更。
rosu
2020-03-13 19:55:30 +08:00
@rosu “前段”更正:前端
janxin
2020-03-13 20:02:20 +08:00
传 null,方便非 JS 语言处理
oneisall8955
2020-03-13 20:03:51 +08:00
JAVA 来说,肯定 Null,不然反序列化属性类型对不上
zhuisui
2020-03-13 20:12:16 +08:00
首先该字段类型为 int,就肯定不能传 ''
然后如果要表示为空值,那肯定是 null。由于 0 已经被占用了,说明它的意义不是空。
如果不传<=>undefined,在序列化的时候(如 json 或 protobuf )这个键就会被去掉,也就不能看出是空的含义。

双方约定更应该靠向遵守一般程序接口设计规范,而不是私下约定。
optional
2020-03-13 20:14:56 +08:00
传 null, 加上 json-schema 校验, 通不过就说明后端偷偷改了 api,线上 bug 就背锅。
celeron533
2020-03-13 20:25:44 +08:00
医学影像 DICOM 是这么做的:
数据 null:返回空数组
数据有值:返回只有一个值的数组,且 int[0]=value
hantsy
2020-03-13 20:26:44 +08:00
直接去掉,省数据流量
noobma
2020-03-13 20:54:26 +08:00
菜鸡前端表示,还是 null 好,比如 ts 里面定义 null | number 和 string | number,那肯定是 null | number 一眼就能看得出是啥意思😎
xiaoming1992
2020-03-13 20:59:31 +08:00
或者-1 也行啊
des
2020-03-13 21:09:43 +08:00
我们用-9999
blessyou
2020-03-13 21:17:13 +08:00
空值字段都不给😂
luopengfei14
2020-03-13 21:41:22 +08:00
连 null 也不传,省流量,装逼中( ̄~ ̄;)
hstdt
2020-03-13 22:36:14 +08:00
@Pursue9 限制这么多,那就还是传 null 吧。我是被人用"null"坑过几次的,所以一般不想这么推荐,但是这个确实是标准答案😹
Pursue9
2020-03-13 22:43:09 +08:00
@hstdt ios 那边说接收 null 会变成 "<null>" ,不知道他们怎么解决的

@des
@xiaoming1992 负值也有缺点,枚举是可为负数的,
Pursue9
2020-03-13 22:45:37 +08:00
我们这边全转字符串了, 返回
```json
{"status1":"-1","status2":"1","status3":"0","status4":""}
```
用起来就非常奇怪

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

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

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

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

© 2021 V2EX