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

262 天前
 imba97

今天发生一个离谱的问题

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

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

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

争论开始了

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

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

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

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

类似这样

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

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

最后虽然也改成统一的了

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX