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

11 小时 53 分钟前
 mouyase

前情提要

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

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

问题简述

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

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

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

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

争议

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX