关于今天给前端返回数据的结构的争论

5 天前
 imba97

今天发生一个离谱的问题

我是个前端开发,有一个列表接口,本来有数据,后面突然列表没了,前端逻辑没动过

我看了看接口,发现接口正常,里面列表数据都在,在控制台打印数据也都正常

最后打印列表字段 rows 发现是 undefined,这才发现列表数据的 key 变成了 data

争论开始了

后端反馈是有两种数据结构,一种是有分页一种是无分页

有分页的接口返回 rows,无分页的接口返回 data

后面甚至提出前端在响应拦截器判断一下,有 rows 的话拿 rows,没有的话拿 data

我觉得很离谱,在我的认知中,我认为后端返回的数据要保持一致性

类似这样

interface ResponseData {
    code: number
    data: Array | Object // 这里就大概表示一下可以是列表数组可以是对象
    total?: number // 需要的话返回
    message: string
}

争论半天后端大概意思是:“一般都是这样的,分页和其他查询结果有差异”、“没有必要改 不然看不出来 分页和部分也的区别了”、“你现在没数据了你能第一时间知道是接口改成不分页的了”、“这个框架都几十年了一直都是这样” ...

最后虽然也改成统一的了

但我我对这套说辞是:???

想请教一下大家,你们对接的数据结构也是不统一的吗?哪种方式更好呢?

4861 次点击
所在节点    程序员
101 条回复
lscho
4 天前
我是后端,这个问题从表面上看肯定是后端的锅,同一个接口出来两种不同结构的数据就是不符合规范的。

从根源上说你们整个组都有问题,应该先定规范再开发,而不是中间遇到问题再协商。

即使是遇到问题需要协商,也需要有一个拍板决定的人来决定怎么处理。
simo
4 天前
往业务链上游走,先从产品经理开始,一渣到底,折磨死后端
chairuosen
4 天前
我的做法:反正我不该,你爱咋咋地,你找谁都没用
zacard
4 天前
改接口定义已经是违反开闭原则了,还不通知前端,首先后端就是理亏了。数据结构合理性上说,不管是否分页,肯定都是包在 data 里面符合业内普遍做法
imba97
4 天前
@xuanbg 之后后端其实分分钟改好了,我就感觉很离谱
iOCZS
4 天前
无脑 list 。。。。
imba97
4 天前
@lcbp 也不是分页需要换接口,是调用有分页的接口返回的是 rows 。所以这次的情况是后端可能不小心把有分页改成无分页的数据结构,对于前端排查来说看到接口有数据就会过掉,根本注意不到是 rows 还是 data ,后面做的排错都是无用功,这就让我觉得很难受
imba97
4 天前
@tabc2tgacd 是这样,之前把有列表的接口改成 rows 我虽然感觉很奇怪但也接受了。这次问题是后端可能不小心改错了,把有分页改成无分页数据结构了,所以 rows 变成 data 了。前端这边排错一般看到接口有数据就排查别的了,根本注意不到 key 是不是变了,后面的排错都是无用功浪费时间。如果都统一了至少不会有这个问题,顶多可能是分页功能失效了,这样前端也能更直观的看出来问题
imba97
4 天前
@november 我这边没后端代码,而且估计是不小心改掉了,前端排错也不会先注意是 key 变了,看到接口有数据就看别的问题了
vishun
4 天前
后端用的 ruoyi 框架,就是这样,主要问题是后端改了没告知前端的问题,定义一个和两个类型没什么区别。
imba97
4 天前
@vishun 可能误操作改成无分页数据结构了,问题是后端可能也不知道。所以如果数据结构统一,分页改了最多可能影响前端分页功能失效,前端能更直观的发现问题
digimoon
4 天前
能一样就一样我觉得没啥问题,谁愿意每个螺丝孔都用不同的螺丝
kakki
4 天前
@laminux29 有的接口在查询参数不同的情况下,返回 pageCount 为 1 就是无分页,有无分页部分接口应该直接在概念上定义好,而不是根据敲一棍子看看出什么 shit 来判断。
JayLin5
4 天前
理论上来说肯定是一致最好,但是实际开发过程中,看谁强势一点哈哈哈,能叼的过他直接开叼,叼不过默默改前端加个判断,都是草台班子,对于老板来说项目跑起来就行,反正等你离职之后痛苦的是下一位,然后下一位就开始骂祖传代码。
panbeta
4 天前
服务端刚毕业吗? 这水平做外包都勉强
november
4 天前
@imba97 其实我意思是,后端说自己没改,直接一起查代码看看。
当然这种做法容易得罪人,但也高效责任明确。不用双方都口嗨。
kakki
4 天前
@laminux29 我又看了一下上下文,很明显我们讨论的完全不是一个东西~
我们讲的是“相同实体的有无分页数据接口”,你讲的是”分页接口的有无分页判断“,很明显,这不是一个东西。
jianghu52
4 天前
我说头像怎么这么熟悉呢,原来是 B 站的博主啊。加油。
cuberlzy
4 天前
无所谓。争赢了去下家公司还得争
laminux29
4 天前
@kakki

我的意思是,一个接口就够了,根本就不需要为了分不分页去搞 2 个或多个接口。

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

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

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

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

© 2021 V2EX