关于接口返回null的假设方案

Posted zuank

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于接口返回null的假设方案相关的知识,希望对你有一定的参考价值。

问题
在日常和后端接口对接的过程中,经常会遇到接口字段存在null的值,比如

{
   code:0,
   msg:\'success\',
   result:null
}

而这个时候 我们再获取result.userInfo的时候,javascript就会报错。所以前端不光要校验接口状态code是不是为0,同时还要校验result是否是预期的对象类型。
也就是从原来的

if (res.data.code === 0)

改为

if (res.data.code === 0&&res.data.result)

特别是当我们预期数据结构是

{
  code:0,
  result:{
    userInfo:{
      userName:\'\'
    }
  }
}

为了顺利的取得userName这个值 我们需要做三次判断

let userName = \'\'
if (res.data.result&&res.data.result.userInfo&&res.data.result.userInfo.userName)
 userName = res.data.result.userInfo.userName

很让人头疼
而且98%的后端都不会乐意按照预定的数据结构返回
就是导致 object/string/number/array 都有可能是null
及时你最终打败了后端,答应了按照格式返回,
但是终究还是接口返回不可信

于是我预想了一个方案主要解决那么多的if判断,将接口返回格式化成我们想要的样子

通过保留基础格式,然后将接口返回合并至基础数据的方式

这样做的好处是

  1. 完全保留了预期的数据结构
  2. debug代码的时候,可以清晰直观的看到当前接口返回的数据格式,增强可读性
  3. 方便做接口mock拓展

以上是关于关于接口返回null的假设方案的主要内容,如果未能解决你的问题,请参考以下文章

一个函数应该返回什么可以失败?

在片段中调用 getActivity() 以使其不返回 null 的最佳做法是啥? [复制]

getActivity() 在片段上返回 null?

android片段getArguments()返回null

安卓。片段 getActivity() 有时返回 null

谷歌地图 V2 位置返回 null