[不懂就问] 为什么有的后端接口会使用二维数组输出表格数据

2020-10-30 16:44:26 +08:00
 vone

今天在调用一个接口时发现返回值如下:

[
    [50024048,50008827,"宝宝布书",0,"std","Y",25,"玩具 /童车 /益智 /积木 /模型"],
    [124470013,124508010,"水枪",0,"std","Y",25,"玩具 /童车 /益智 /积木 /模型"],
    [50008281,50012922,"密封罐",0,"pro","Y",50016349,"厨房 /烹饪用具"],
    [50010101,50006778,"漏勺",0,"pro","Y",50016349,"厨房 /烹饪用具"],
    [50008281,50012921,"米桶 /米缸",0,"pro","Y",50016349,"厨房 /烹饪用具"],
    [50010101,50006777,"汤勺",0,"pro","Y",50016349,"厨房 /烹饪用具"],
    [50010101,50006776,"全套勺铲",0,"pro","Y",50016349,"厨房 /烹饪用具"],
    [122964001,50023167,"首饰架",0,"pro","Y",122928002,"收纳整理"]
]

1 、从前端角度来看这种格式极为不合理,业务变更时无论是新增列还是删除列,都有可能导致大量的索引位置发生变化,进而需要大量的代码修改,非常容易出错。

2 、从后端角度来看,Array 必须是同类型的数据,才能做到高效和节省内存,而且有些静态语言很难反序列化同一数组下类型却不一致的 JSON 。

有没有人知道使用二维数组传输在哪些场景下是存在优势的。

自己猜测两个:

1 、结构更加紧凑,节省带宽

2 、有隐藏字段名的需求

3451 次点击
所在节点    程序员
33 条回复
oneonesv
2020-10-31 01:01:27 +08:00
性能好 省带宽 数据量越大越明显 至于 index 定义可以单独一个接口
noyle
2020-10-31 01:42:13 +08:00
不懂就问:那楼主当时以为应该用什么来做最好?
eudore
2020-10-31 09:10:26 +08:00
首先第一层一定是数组[],用于虚拟 dom for 循环数据渲染 ui 。
第二层可以是数组 []也可以是 json {},json 有键值对应,数组可以压缩传输量,序列化性能应该也有提升。
seakingii
2020-10-31 10:14:52 +08:00
我发的,带有 columns 的,只是一个通用的,能自行解析的一个例子。我不知道你实际用的接口有没有地方有定义列,但是,只要接口不要经常性的改动,不带列也是可以的。只要约定好就可以。

上面怀疑有没有这个必要的人,对于某些人某些场景来说,能省一点流量,内存,就多省一点。当数据量级,访问量级,以及客户端的响应时间要求(ms 级的考虑)都是问题是,能省一点都是好的。

比如说电商平台,比如说上面说到的 GPS

再举个例子,假设你现在有个新的业务,规定要用 JSON 上传数据 ,你的客户端是 物联网设备,你有几万这样的设备,要求每设备 5 秒上报一次数据,每次上报有几百条数据,在这种比较极端的场景,你是考虑这种 JSON OBJECT 数组,还是 JSON 对象数组?
rodrick
2020-10-31 10:18:30 +08:00
这种数据肯定是得配套一套完善的接口文档说明或者中间处理工具的吧,不然回头你改动个啥前端不得要了老命
MineDog
2020-10-31 11:16:42 +08:00
这就是表格数据的本质啊,只是缺一个表头没返回给你罢了
daozhihun
2020-10-31 11:22:17 +08:00
确实很蛋疼,而且省带宽也不是在这个地方省,这种东西能有多大,随便一个高清图、视频什么的就比它大好几个数量级
Foxkeh
2020-10-31 11:51:57 +08:00
这结构已经精简到跟 csv 差不多了, 目的应该就是省流了. 有没必要这么省看业务场景吧
niubee1
2020-10-31 11:58:31 +08:00
最好再加一个 meta 数据,描述每一列的标题,数据类型等,然后前端开发个组件根据 meta 来显示二位数组成为表格。那就很 amazing 了,需要改输出的表格结构的时候只需要后端修改就行了
Baileys
2020-10-31 19:48:29 +08:00
@simonlu9 带宽高就可以一下子接受一行,这个意思吗?一般带宽是多少啊……
abersheeran
2020-10-31 19:53:31 +08:00
@daozhihun API 服务器的带宽肯定比静态文件的带宽宝贵啊。
daozhihun
2020-11-01 11:04:48 +08:00
@abersheeran 你说的对,静态资源和 API 服务器确实不能混为一谈。
indo
2020-11-01 20:49:49 +08:00
最近自己造轮子,我从后端返回给前端的数据也是二位数组的。

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

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

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

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

© 2021 V2EX