后端传过来的某些属性不固定,有时候有,有时候没有,这样合理吗?
比如和后端商定好了,返回的接口格式是: { “A”: ““, “B”: [{}, {}] } 这时候后端说了,B 的数据有时候没有,如果没有的话就直接返回{A:”“} 我让他返回{“A”:”***”, “B”:[]}
哪种方案好?
比如和后端商定好了,返回的接口格式是: { “A”: ““, “B”: [{}, {}] } 这时候后端说了,B 的数据有时候没有,如果没有的话就直接返回{A:”“} 我让他返回{“A”:”***”, “B”:[]}
哪种方案好?
{name:null,age:0,address:{postcode:null,street:null….},…..} ??
我们一般的逻辑是:首先 null 跟空是不一样的,其次 json 序列化返回的时候自动过滤 null 值
但如果是 B 算主业务, 则无论如何都传. 但上文的 B 应该不是主业务.
另外:B 不存在、B 存在但为空、B 存在不为空但为空数组等等,这些都是不同的逻辑。建议增加状态字段来区分这些情况。
比如前端应该这样返回:
struct ResultData
{
….string A;
….//Bstate:B 的状态码
….// 0:B 不存在; 1:B 存在但为 null ; 2:B 存在且有值。
….byte Bstate;
….//当 Bstate 为 2 时,允许 B 为空数组。
….array B;
.
}
1.如果接口有 100 字段,那么外加 100 个状态字段是合理的。根据状态字段去进行判断是否要进行渲染,这也是合理的。
2.如果加了状态字段,前端犯了不判断状态的错误,那么很显然这里就只存在这一种错误了,这种错误容易发现,容易排查。但不加状态字段,错误的原因会更多,需要一条条去排查,费时费力。
总之,这种设计是加强鲁棒性的做法,你们这些萌新需要仔细体会,加强学习。
之前调试几个接口,有时候没有字段,有时候回个 null,有时候回空数组,这种不稳定的接口真是一言难尽。
{A:””},以后想要知道这接口只返回 A,还是可能会有 B,就比较麻烦了。特别是一些不怎么出现的参数。
接口按结构返回了,以后调一遍,看看结构,理解当时的接口情况简单多了。
情况写明白了,那客观上选哪个方案一目了然了。主观的话就不谈了。