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

4 天前
 imba97

今天发生一个离谱的问题

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

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

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

争论开始了

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

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

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

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

类似这样

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

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

最后虽然也改成统一的了

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

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

4810 次点击
所在节点    程序员
101 条回复
imba97
4 天前
@sgiyy 后面改了,分分钟改掉了
ruxuan1306
4 天前
赞同二楼,写个`rows || data`兼容就行了,来回 battle 加发帖内耗两三小时就过去了。
大多数系统活不过一两年,人生那么多重要的事,还是多花时间汇报吹 b 向上管理。
imba97
4 天前
@ashing 是的,所以我感觉很离谱,分不分页还跟返回的数据结构有关联了
imba97
4 天前
imba97
4 天前
@ruxuan1306 也没,后面拉了个会,后端分分钟改完了
imba97
4 天前
@klzy 后端是 JAVA ,应该是 Spring Boot
imba97
4 天前
@demonzoo 好像是不小心改错了之类的,所以没通知前端,这个倒是可以理解
metalvest
4 天前
OP 想的是如果数据结构统一了,至少就可以避免这次前端做无用功的排错。但后端想的是幸好没统一,不然可能很久都发现不了这次误操作。
imba97
4 天前
@metalvest 但我感觉,反而分页失效了能更直观的看出来,比一个 key 变了更能快速发现
dayeye2006199
4 天前
问就是 graphql
zerovoid
4 天前
加个判断的事情,除非有代码洁癖,没有让前端自己去拉数据库增删改查就不错了。
lijianan
4 天前
https://zod.dev 用起来,数据结构不对直接拦住,UI 降级一下把错误展示出来
xuanbg
4 天前
其实 OP 说的是原先不管是数组还是对象,都放在 data 字段。现在后端改成 data 字段只放对象,数组则放到 rows 字段。这种无厘头行为给 OP 带来了困扰,原先写好的获取数组的接口都要相应修改成取 rows 字段才能正确显示数据。

这不是赛博画蛇添足么? OP 你应该问下后端用 data 返回数组判几年?
zhaokun
4 天前
是否启用分页我一般给个参数让前段控制,返回结构是一样的
lcbp
4 天前
是否分页为什么要换接口,为什么要两种不同的数据方式。后端接口支持传递分页参数(页码、每页数量)不就行了吗?

{
code: 200,
message: '',
data: 列表数据 Array<item>,
meta: { pagination: {当前页码、本业数据条数、是否有下一页、记录总数} }
}
tabc2tgacd
4 天前
这里一个关键是:事先有没有做出这样的约定?如果有作出约定,那是前端的锅,如果没作出约定那就是后端的锅。至于是不是合理,反而不重要。
andytao
4 天前
升高维度:请他一根烟 或 一瓶可乐,建议改成一致, 不就双方都很愉快嘛
a33291
4 天前
正好前不久遇到过第三方类似的设计
作为后端,我觉得这就是后端设计问题,况且统一的数据结构对后端来说也更简单
laminux29
4 天前
看了楼上的评论区,深刻反映出:我国软件水平还非常低,低还普信。

OP 的考虑是对的,对于专业的软工,正确的做法是,只用一套数据结构,在数据结构内部,通过 pageCount 来判断是否有分页。如果无分页,pageCount 为 1 ,表示只有 1 页数据。如果大于 1 页,表示有分页。

楼上那些 2 套接口、甚至 rows || data ,全都是瞎搞。
november
4 天前
有没有改,直接看 git commit 不就有了?

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

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

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

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

© 2021 V2EX