下面内容基本翻译自如下文章:https://stackoverflow.com/questions/21188145/is-it-worth-to-exclude-null-fields-from-a-json-server-response-in-a-web-applicat
问题:
在restful api开发中, 对于返回的json数据, 如果属性值为空.,那么返回key=null好一些? 还是干脆不返回这个字段信息好一些?
选项一:
{
"name":"bob",
"age": null
}
选项二:
{
"name":"bob"
}
我的答案:
视情况而定,大多数时候使用"选项一"吧.
保留 {key:null}的好处:
"如果接口越公开, 可能的使用者越多, 那么接口越应该保持不变".
- 如果有个字段,有时候返回, 有时候却不返回, 这样的接口稳定性是比较差的
. 在说明文档缺失的情况下, 使用者会产生困惑.然后不得不寻找接口的开发人员咨询,提高了接口支撑成本. - 如果使用者大多数时候能看到字段, 他会以为字段一直会出现, 然后编写代码的时候可能就不会去判断key是否存在. 当key偶尔不存在导致程序报错时又不好发现和排查.
- 数据key一会出现一会不出现, 会引入不确定性: 如果没有出现, 是因为api改变了吗? 还是因为使用者解析出错了? 还是调用出错了?等等
- 对于开发接口的人来说: 他得写代码把key=null的数据剔除掉(可以使用jackson工具), 但是毕竟引入了新的逻辑. 新逻辑意味着可能的新风险.
在大多数应用中, 网络延迟才是主要考虑因素, 而不是带宽. 出于性能的考虑, 很多api开发人员更喜欢少量"大接口",而不是大量"小接口", 一次拿到很多数据,总体上比不停地调api好一些.
对于大多数应用来说, 数据不一致比存在多余数据更危险.
当然也存在一些应用, 频繁调用api, 对数据大小分毫必争, 多一个字段代价都很大.....那么毋庸置疑,为null的字段不返回更好. 还有比如接口有100个字段, 但是大多数时候90个字段都是null....这种情况下90个字段都无意义的.此时选择精简节约型也更好一些.