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

121 天前
mouyase  mouyase

前情提要

我们的产品今日在开发环境暴露出一个风险,某些数据取值取不到了导致产品崩溃。

排查了半天数据和逻辑之后,发现是因为某个接口返回的数据新加了一种类型,但是这种类型的定义和之前的另一种类型是相同的,导致代码合并后,有的数据处理认为是之前的类型,有的认为是之后的类型,导致某些判断分支没有达成,最后导致数据没有正确解析。

问题简述

我们排查了问题之后,理了一下现在的逻辑。

假设我们之前的数据有 A ,B ,C 三种类型,然后根据数据的 type 字段等于 A ,B ,C 来判断数据类型,再根据类型去做相应的数据解析和操作。

但是现在服务端只在某些接口中,把 C 类型给区分成了 C 类型和 D 类型。C 类型的 type 字段是 C ,D 类型的 type 字段是 D 。但是现在的 D 类型的数值是我们之前客户端用的 C 类型,现在的 C 类型则是之前我们客户端会过滤掉的一种数据。老的接口中依旧只有 type 值为 C 。

于是我们现在如果需要在老的接口判断是否是我们需要的类型,就要经历下面几个判断才能确定值的类型。

争议

理清逻辑后,我就去找服务端理论,为什么要设计成这样。

讨论了半天,总之就是服务端那边不同的人代码逻辑没有统一,最后导致类型定义不统一。

但是服务端表示我们不会改,因为改了容易出问题,而且 Web 端已经适配了,希望我们也适配一下。

我便问他: “但是你这逻辑已经错了,不处理一下吗?我们要适配你们的错误逻辑吗?”

服务端表示: “服务端写错了你们就错着适配吧。”

8754 次点击
所在节点   程序员  程序员
60 条回复
dishuibaby
dishuibaby
121 天前
我们的 app 的绝大多数 bug ,不管客户端、服务端的问题。只要服务端能兼容的,优先服务端处理,保证用户服务
janus77
janus77
121 天前
要改也不能默默改,不光要跟平级同事对质清楚,还要跟上级聊清楚,根本上来说到底是谁的责任。
不然事情过后淡忘了,后面他们就以讹传讹认为是你的错误了,职场里面太多这种事了,不得不防
zhtyytg
zhtyytg
121 天前
@janus77 太对了
guanzhangzhang
guanzhangzhang
121 天前
先给领导讲,有了大体意见后再拉群和拉产品 pm ,有记录再看怎么做
horizon
horizon
121 天前
这一般不都是客户端做的事吗?怎么反过来了
RandomJoke
RandomJoke
121 天前
哪那么复杂,加个新的 type 字段不就行了...回到问题,崩溃不应该,你可以报错,但不能崩溃,解决这个问题最快的方案就是你们先适配,因为本身你们崩溃不管怎样都是要处理的,需要一次发版
slert
slert
121 天前
记得以前接口文档字段有拼写错误也只能捏着鼻子按照拼错的做
问题抛给领导,他说怎么搞就怎么搞,虽然按错的方式做事很难受,但如果大家都不在乎,也就随便吧
wuzhewuyou
wuzhewuyou
121 天前
一般都改服务端啊,客户端(除 web )改了还要重新分发
bigscotaleha
bigscotaleha
121 天前
客户端不需要发版本,审核成本的吗?
ala2008
ala2008
121 天前
不兼容的接口能上线?没有升级版本的客户端怎么办
guanhui07
guanhui07
121 天前
一般都服务端做兼容。。所以服务端也可能要给客户端抹屁股
debuggeeker
debuggeeker
121 天前
你就问他一句:是不是你服务端升级之后,才把客户端搞死的!
james2013
james2013
121 天前
不改,只有客户端搞错了,服务端兼容
要不然,影响众多客户端用户
lasuar
121 天前
找 leader ,没有懂技术的 leader 那就莫得法了。
xloger
121 天前
"然后 Web 端真的就错着兼容",因为他们没强类型...

我之前一公司,后端给我 JSON ,他连 Array 和 Object 都分不清,Map 和 Array 也分不清。一个字段不存在,薛定谔地返回:null 、""、[]、"null"。
mouyase
121 天前
@xloger #35

你别说,你还真别说,我之前就吐槽过服务端反的数据千奇百怪

https://v2ex.com/t/1004262
prosgtsr
121 天前
当然是后端改啦,客户端就算发版本老版本用户怎么办
IvanLi127
121 天前
你得问问 web 前端有啥意见,做白工是一回事,服务端改好了他那会不会崩又是一回事。

看你们这流程……明显就是后端定接口,所以他们说了算。这时候他们不提供文档,你得提供文档要求他们,达成共识才能往下推进,不然这种事没默契只能一直扯。

但是,客户端是存在多个版本同时在线的,如果不能热更新,不可能随随便便一个服务端能解决的 bug 让客户端发版呀。遇到这种事谁解决的速度快成本低,谁解决。
yhnbgfd
121 天前
两个问题, 1 错误的东西要不要改, 我建议改, 放任不管只会加速奔溃的到来. 2 谁兼容谁, 天大地大客户端最大, 服务端你多牛逼能让所有客户端同时更新到最新版?
kandaakihito
121 天前
看笑了,这种破事我待过的项目组里面也发生过,最后基本就是谁软了谁改。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1082855

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX