后端 API 重要的是语义准确而非前端使用方便。null、空对象、空字符串的语义是不一样的,牟然转换容易丢失语义,引发后续维护的困难。我在此基础上补充点更贴近现实的内容。
如果不允许有 null,我建议 API 直接返回错误信息,而不是前端再做错误处理。
到底要不要返回默认值取决于该域的实际用途。如果该域的默认值是为了处理 View 层的问题,那么这个默认值就肯定只能是 View 自己去处理。如果后端服务器为你提供了默认值,一是服务器自己实现了与自己无关的逻辑;二是如果该 API 不只一个用户,这个逻辑就蔓延到其他用户身上;三是如果后续要改 View 的逻辑(例如判断是否为空值),就需要后端开发配合实现,增加额外的沟通合作成本。
如果该域的默认值是系统设计上的(例如用户权限默认为只读),此时就后端就(很显然)应该返回默认值。这就是它要做的事。
针对取值困难的问题,JSON 数据的取值还是比较简单的。使用 Lodash 的 get function(_.get(object, path, [defaultValue])) 或者自己包装一套类似的 API,应该足够解决大部分数据结构的取值,判空,默认值问题。
实在不行,用 Node.js 实现一层中间层用于数据预处理也是非常简单。