后端不按格式返回数据的问题……

2020-11-15 12:25:54 +08:00
 lwlizhe

刚才有个朋友问我,发生什么事了,

我说怎么回事,给我发了几张截图,我一看,

嗷,原来是刚才,有一个高级后端,将业务数据做为 key 返回给我……

( 咳咳,举个例子:他返回的是直接一个 jsonObject:{"用户名 1":1,"用户名 2":2},我当时还以为是类似于这种:[{"userName":"用户名 1","value":1},{"userName":"用户名 2","value":2}] )

我说可以,我说是不是应该按格式来,这样不好用,

他不服气,我说大佬,你用这种方式返回数据,那怎么转成实体类呢?

我一说他啪就站起来了,很快啊,然后上来就是一句自己解析 json 数据不就行了,

我全部防出去了啊,防出去以后,自然是以商量的语气问下能不能以固定格式的方式,至少能转成实体类,这样大家都舒服,毕竟接口嘛,最好固定格式,这样无论从维护角度还是可用性来说都很不错的

结果他说我是有备而来的,这个只有四年工作经验,还是外包的年轻人不讲武德,来,骗,来,偷袭,他这个高级后端的老同志,这好吗?这不好,他劝我这位年轻人好自为之,好好反思,以后不要再犯这样的错误,小聪明啊,工作要以和为贵,要讲武德,不要搞窝里斗

咳咳,最后当然是以大佬说的为准,毕竟按他的说法

为什么你一定执着于这个非固定 key 这个 jsonobj 和 class 有什么不一样么?

以上纯属根据自身经历而来的逗乐吐槽……如有雷同冒犯,请轻喷~~~~

8467 次点击
所在节点    程序员
89 条回复
EminemW
2020-11-15 17:02:39 +08:00
不会吧,还有支持用 jsonObject:{"用户名 1":1,"用户名 2":2}这种的?该不会方法接收参数还用 map 吧
smilingsun
2020-11-15 17:11:38 +08:00
看来 v 站蛮多人不看 b 站不看马保国的🤣
kooze
2020-11-15 17:14:24 +08:00
我猜后段是那个最好的语言开发的
GoLand
2020-11-15 17:42:41 +08:00
这是小学语文没学好吗。。。。看半天除了楼主你自己还有谁能看明白你在说什么?发论坛上肯定希望大家一起讨论讨论,写的时候先考虑下是不是大家都能理解你这种火星文。
labulaka521
2020-11-15 17:43:13 +08:00
回一句 希望你耗子尾汁
dustinth
2020-11-15 17:59:21 +08:00
后端返回这个格式除非是极端要求通信性能的情况(比如返回几千几百个), 都是不合适的: Map 支持不了顺序的语义(返回 List 如果要求顺序呢?), Map 支持单个 entity 的语义上也不清晰(如果返回信息是 getByID 要么返回一个 Entity 要么为空);
lwlizhe
2020-11-15 18:07:14 +08:00
@GoLand 额,其实问题已经解决了……谁职级高谁说了算……

其实……我就来吐个槽的~~~~所以写的比较随性哈……见谅见谅,其实具体内容看 append 就行了
CantSee
2020-11-15 18:52:47 +08:00
默认用 rest 格式的返回信息 后台就行 int httpstatus;String msg; <T> data; 返回统一 json
jhdxr
2020-11-15 21:56:20 +08:00
还是得看场景,如果说是要确保用户名(或者其他作为 key 的字段)唯一的场景下,明显 Map 比 List 合适。
Orenoid
2020-11-15 22:17:01 +08:00
我有写过一两次这种接口,不过事先问了前端。因为当时那个接口如果以这种形式返回,只要一两行代码,要转换的话会特别繁琐……我实在不想处理,问了下前端,前端也没意见,就那么返回了。
danielzh
2020-11-15 23:18:44 +08:00
据我知道。PHP 这种数据结构简单、且动态解析数据的后端语言,喜欢用这种业务 ID 为 key 的结构。
(重点:对于 PHP 来说用起来非常方便,像你提到的实体,PHP 涉及很少)
所以有相当一部分 PHP 后端,认为就应该带 Key 。

但对于不希望包含太多数据处理逻辑的前端来说,喜欢后者,后者的结构也跟语言相关。
我之前写 PHP 的时候,会专门写一个数据转换方法,按照前端格式转换一下,对双方都好维护。
danielzh
2020-11-15 23:23:12 +08:00
接上文。我从技术的角度分析下,为啥 PHP 喜欢这样。
1 、后端算出来结果长这样:
一个数组:["用户名 1":1, "用户名 2": 2]
2 、调用 PHP 语言的解析为 JSON 对象后:
{"用户名 1":1,"用户名 2":2}
3 、如果转换成前端期望的结果:
[{"userName":"用户名 1","value":1},{"userName":"用户名 2","value":2}]
需要将上文的数组,先做一次循环转换才行。所以后端会觉得复杂。
Ptu2sha
2020-11-15 23:27:42 +08:00
哈哈 前端很无语 没有 key 不香
nexo
2020-11-15 23:44:18 +08:00
耗子尾汁 doge
xfcy
2020-11-16 00:27:22 +08:00
我写了好多年 php 也不喜欢这种方式啊
oppoic
2020-11-16 00:33:33 +08:00
互相尊重,商量着来。合作几次之后,公司哪个前端最靠谱你肯定心里有数了,再有项目点名要他即可。实在不行自己做前端咯
bilibilifi
2020-11-16 05:47:31 +08:00
也就是说计算结果没有对应的 class,那么一些类的特殊限制他都是手动实现而不使用工具链吗?
ztxcccc
2020-11-16 08:07:37 +08:00
这帖子我绝对每年看一次
calmlyman
2020-11-16 08:36:59 +08:00
看来是训练有素,有备而来啊
kltt22
2020-11-16 08:54:20 +08:00
语死早,看起来好费劲。
@danielzh
你是怎么知道 PHP 喜欢这样返回的? PHP 的数据都是[{"userName":"用户名 1","value":1},{"userName":"用户名 2","value":2}]这种格式的,PHP 处理数组的方法一箩筐,还搞不定这样的小场面? PHP 简单易用不是浪得虚名的。反而是 JAVA,做完运算还要筛掉空值的,用 C#对接的时候,没有完整版文档光凭返回值做实体类,不是少这个就是少那个,别扭的要死。

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

https://tanronggui.xyz/t/725418

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

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

© 2021 V2EX