接口中如何定义空数据

随笔 2018-04-13

提出问题

前后端常用的 json 格式进行传输,那么怎样来表示空数据呢?空字符串返回 null 还是 "" ,数字返回 null 还是 0 ,列表呢?

这种需要前后端协商一致,一百个项目会有一百个规范,也没有人教你怎样定义更合理,都是通过经验,协商磨合和妥协中产生的。我这边说说按我的经验空数据的定义方式。

少用 null

对,少用 null ,尽管它能在序列化中得到优化。我的经验就是空字符串定义为 "" ;数字定义为 0 ,如果要的就是 0 怎么样,那就用 -1 或更小的数表示空数据,实在不行再用 null ; 集合当然是 [] 了。

为什么?

一个是能避免多余的空指针异常,再来是文档说明也能更合理,我特别讨厌别人文档里写的明明是 string 类型,结果返回 整型,布尔值,对象等都瞎几把来了。明明是整型,结果是字符串包裹着数字。哎,文档定义不规范会导致开发成品不规范,接口对接起来烦的一批,互怼互撕逼也就有了。总之,少埋雷,你好,我也好。

有一次做数据签名处理,AES 加密什么的,有 null 的时候会概率出现一些解密失败的情况。

数据序列化一般目的是将对象转成文本形式来存储,null 字段会被优化,而就算用 ""[] 也不会让文本长度有明显增加的。

总结

null 语义上更能体现出空对象和空值。在接口对接或业务需要明确的空的意思时再用 null 。否则,请尽可能使用不容易引发异常的数据。


本文由 hongweipeng 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

如果对您有用,您的支持将鼓励我继续创作!