服务端开发错了,客户端就应该错着适配

查看 93|回复 9
作者:mouyase   
前情提要
我们的产品今日在开发环境暴露出一个风险,某些数据取值取不到了导致产品崩溃。
排查了半天数据和逻辑之后,发现是因为某个接口返回的数据新加了一种类型,但是这种类型的定义和之前的另一种类型是相同的,导致代码合并后,有的数据处理认为是之前的类型,有的认为是之后的类型,导致某些判断分支没有达成,最后导致数据没有正确解析。
问题简述
我们排查了问题之后,理了一下现在的逻辑。
假设我们之前的数据有 A ,B ,C 三种类型,然后根据数据的 type 字段等于 A ,B ,C 来判断数据类型,再根据类型去做相应的数据解析和操作。
但是现在服务端只在某些接口中,把 C 类型给区分成了 C 类型和 D 类型。C 类型的 type 字段是 C ,D 类型的 type 字段是 D 。但是现在的 D 类型的数值是我们之前客户端用的 C 类型,现在的 C 类型则是之前我们客户端会过滤掉的一种数据。老的接口中依旧只有 type 值为 C 。
于是我们现在如果需要在老的接口判断是否是我们需要的类型,就要经历下面几个判断才能确定值的类型。
  • 这个数据来自新接口还是老接口
  • 如果是老接口,那他的 type 是否等于 C
  • 如果 type 等于 C ,他是否具有 data 字段
  • 如果具有 data 字段,他的 data 字段下是否具有 sub_type 字段
  • 如果具有 sub_type 字段,sub_type 字段是否等于 1
  • 如果等于 1 ,那他就是我们之前用的老的 C 类型
  • 如果等于 2 ,那他就是我们之前要过滤掉的类型

    争议
    理清逻辑后,我就去找服务端理论,为什么要设计成这样。
    讨论了半天,总之就是服务端那边不同的人代码逻辑没有统一,最后导致类型定义不统一。
    但是服务端表示我们不会改,因为改了容易出问题,而且 Web 端已经适配了,希望我们也适配一下。
    我便问他: “但是你这逻辑已经错了,不处理一下吗?我们要适配你们的错误逻辑吗?”
    服务端表示: “服务端写错了你们就错着适配吧。”
  • zcf0508   
    找 leader ,一级一级往上找
    jydeng   
    直接拉群,闹起来
    lai9fox95   
    错了不改这是什么逻辑,这种情况一旦出现了大概率还会有下一次,不想给自己堆屎山挖坑就要坚决一点
    sagaxu   
    先出接口文档,后写代码
    1. 有效减少此类错误
    2. 发生这种错误时不用扯皮
    Helsing   
    这种肯定是服务端适配,向上提升吧,不要惯着他们
    falcon05   
    如果有一个 bug ,其他功能都依赖这个 bug ,那它不是一个 bug ,而是一个 feature 。估计后端系统已经严重依赖这个错误了,就会像这样。
    Forestar   
    先把 pm 拉进来,说不通再把你们的 leader 拉进来,还说不通再把对面的 leader 拉进来,这总说的通了吧
    PainAndLove   
    先扯皮,服务端不认,再拉 leader 。 让 leader 决策
    adoal   
    做一个 v2 版的接口,你们调用 v2 ,其它调用 v1 的可以以后迁移。
    注:v2 不是指 V2EX 的意思。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部