前端/客户端有什么办法来处理后端/服务端返回的不规范数据吗

2023-12-29 01:42:15 +08:00
 mouyase
本人是前端,技术栈 ts/java/oc ,web 和 app 都在做。



现在经常遇到后端返回的值让人难以琢磨。



比如同样都是表示是/否,或者打开/关闭两种状态,有点时候返回值是 0/1 ,有时候是 1/0 ,有的时候是 1/2 ,有的时候是 true/false ,有的时候是"on"/"off",还有的时候干脆就是为否就没有这个字段了。



或者是同样都是用户 id ,有时候字段叫做 user_id ,有时候叫 UserID ,有时候就只叫 id 。



然后在业务逻辑中经常会出现从不同接口拿到的同一个值,但是是在同一处 UI 显示。就导致 ts 类型定义得定义好几种不同的类型用来兼容。



各位大佬们有什么好的办法来处理这种情况吗?
12601 次点击
所在节点    程序员
123 条回复
coderzhangsan
2023-12-29 10:07:35 +08:00
可能后端是多个人迭代开发的,没有统一的规范要求,所以就按个人规范来了,如果涉及多处调用,设计一个字典转换下就行了,不涉及业务直接判断就好了,简单的数据处理而已,没有什么好抱怨的。
Dongxiaohao
2023-12-29 10:07:58 +08:00
这种枚举和规范应该是后端的锅吧,我们公司的这种东西只要是一个意思的,命名和枚举值一定是相同的🤔
MillaMaxwell
2023-12-29 10:08:22 +08:00
说明你们这项目后端代码就没审,我是后端开发,后端的接口参数命名都需要规范统一,返回给前端的数据需要直接满足业务的需求,不管是 0/1,ture/false 还是 on/off ,整个项目都用一个就行了
kenvix
2023-12-29 10:09:04 +08:00
要么打一顿,要么后端堆屎你也跟着堆屎,反正最后都是屎山,规范去他妈
mouyase
2023-12-29 10:09:38 +08:00
@coderzhangsan 现在的问题是,每一个接口拿到数据的时候,我们前端都没有办法根据数据的内容判断到底代表了什么状态。不过你说的字典转换确实是现在正在考虑的一个办法。
mouyase
2023-12-29 10:11:50 +08:00
@vincent7245 接口文档都是我对接口数据提出疑问之后才去写的。如果没提出疑问,那文档里就是告诉你,这里有这样一个字段,可能会返回 0 和 1 。
nothingistrue
2023-12-29 10:15:50 +08:00
前后端分离之后,两端是平等关系,不是上下依赖关系,接口定义要遵循的原则是:谁负责,谁主导;或者谁主导,谁负责。

理想情况下,业务模型(产品负责)、数据模型(后端负责)、UI 模型(前端负责)是打通之后一体设计的,那么前后端的接口开发方式是:前端定义,后端实现。(即时是一后对多前的情况下这种模式也可行,由后端负责将一套核心应用程序适配出来多套接口。)但现实情况往往是,(因为后端人数多、工资高)啥活都会压到后端,前后端接口的开发方式就编程了:后端定义,后端实现,前端被动使用。这时候,既然接口是由后端全权负责的,那么就是屎,你前端也得用。
mouyase
2023-12-29 10:23:24 +08:00
@nothingistrue 现实情况确实是这样
cutecore
2023-12-29 10:24:26 +08:00
没有管理+人员流动大,一年多就换一批人,是一批人,有人全部接口 post+json ,有人会部分接口 rest ,有人全部接口 rest 即便 path 参数是中文,作为后端都感觉难受但是也没办法
nothingistrue
2023-12-29 10:29:39 +08:00
上面说了是本源原因,本来像说些治标的解决方法的,但想想我不是前端,哪能给解决方法。这个方法,还得前端自己搞。

只能作为旁观者,给一些经验。不管是被工期逼的,还是自己水平不行,后端能出这么烂的接口,说明整个项目都是烂的。这种情况下,前端即不要想着自己造轮子去处理,也不要想着逼后端去处理,直接每个接口都手撕代码,才是最能让自己不加班的处理方式。
tonytonychopper
2023-12-29 10:30:03 +08:00
这种在对接口的时候就要提出来吧,如果对方不改的话就只能找你的老板反馈,让你老板重视起来之后去推相关的规范。上面有人提到 BFF ,但是我觉得维护这个 BFF 也挺难受……
coderzhangsan
2023-12-29 10:43:53 +08:00
@mouyase 后端如果能改就让他改了,没文档至少要让他把字段释义发文本说清楚,这东西具体看人了,有些人团队协作性强,就会去改,反之,说不定会吵一架,所以有时候不是技术规范问题,跟团队和人主观能动性有很大关系,如果你碰到这样的人,也不要生气,犯不着,问清楚各字段释义,出了问题好明确责任。
dawenxi11
2023-12-29 10:46:06 +08:00
想起来我们后端 leader 跟我们前端说过的一句话:前端有时候要强势一点,不要惯着后端
realJamespond
2023-12-29 10:50:15 +08:00
1,0 true false 对 js 也妹影响啊都是直接 if 判断
wunonglin
2023-12-29 10:52:02 +08:00
@realJamespond #54 曾经碰到的 php 后端,所有字段全部是字符串,01 是"0""1"
wunonglin
2023-12-29 10:52:48 +08:00
@realJamespond #54 包括 true ,false ,是:"true"和"false",只能说只有你想不到
AreYou0k
2023-12-29 10:55:03 +08:00
@mouyase #33 不用猜大概率是 php 转 go 的. 反正我公司就是, php 转 go 也是这种写法.
ayase252
2023-12-29 10:59:12 +08:00
先写接口文档,接口文档定了,面向接口文档开发。接口传的不对就是 bug
AreYou0k
2023-12-29 11:01:09 +08:00
@realJamespond #54 不是 0 和 1 的问题, 说白了就是没有强类型规范这个概念. 对这种后端来说他们的工作就是从数据库拿数据给前端的. 根本没处理过数据怎么会有强类型的概念.
luoway
2023-12-29 11:02:16 +08:00
一般在接口开发时可以商量,对于后端怎么取值都无所谓,也就可能随意取值。
接口一旦上线修改很困难,不仔细评估可能造成线上故障,也就无法随意变更。

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

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

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

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

© 2021 V2EX