后端接口这样设计是否合理

2020-04-13 11:17:05 +08:00
 Bramblex2

有一个接口会返回如下数据:

{
	A: {a: 'a', b: 'b', c: 'c'},
    B: {a: 'a', b: 'b', c: 'c'}
}

假设当 B 为空时,返回如下数据(因为后端固定了数据结构):

{
	A: {a: 'a', b: 'b', c: 'c'},
    B: {a: '', b: '', c: ''}
}

然后让前端自己去判断 B 是否为空,请问这样是否合理?

是否有相应的设计规范?

7677 次点击
所在节点    程序员
96 条回复
vevillive
2020-04-13 14:47:15 +08:00
若是返数是这样的结构,那么,前端展示应该是取 a 、b 、c 的值,这时候,前端顺便判空就好了,因为还有可能 a 、b 、c 只有某个为空的情况。当然,要后端判断全为空的时候给你个空或者不给也行,但是前端的逻辑又要加多一层判断
Yuicon
2020-04-13 14:48:43 +08:00
@Bramblex2 追求正确没问题,不过最好是限制自身,你觉得返回格式不正确可以写工具转成自己想要的。之所以这样妥协只是觉得这种事很多时候争不出什么结论。
ayase252
2020-04-13 14:51:39 +08:00
问题在于主楼的接口定义暴露了后端的实现细节。哪一天空的定义变的话,前端还要跟着改
windychen0
2020-04-13 14:52:04 +08:00
我觉得吧,大概 B 为空的时候传成{A: {a: 'a', b: 'b', c: 'c'}}就好了吧。。。我们前端判断都是 if(data.B){//to do something}的
purensong
2020-04-13 14:52:15 +08:00
作为一名后端,规范是我来定,前端可以提意见,我尽可能满足,不满足就让她保留意见。。
tds
2020-04-13 15:00:51 +08:00
我觉得这是一个沟通问题,以前前端还专门让我装过这种数据,他图用起来省事。一两句代码花不了两分钟,何必搞得这么僵呢。。以后总会碰到一些可能前端不好做,后端好做,或者后端不好做前端好做的东西。真就一步不让,各做各的,最后对大家都不好。
oneisall8955
2020-04-13 15:13:10 +08:00
有问题,我觉得{A: {a: 'a', b: 'b', c: 'c'},B:null} 比较直观
Bramblex2
2020-04-13 15:16:56 +08:00
@tds

你说的对也不对。

对是因为工作上塞垃圾代码的确没有问题,反正能跑就行,没必要跟同事闹僵。

不对是是因为基于对技术的追求,不能降低自己对技术的审美标准。我自己写的接口和带的后端绝对不能给我写这种垃圾代码。
Bramblex2
2020-04-13 15:22:48 +08:00
@Yuicon

所以一般作为前端我自己都会专门写一层兼容层,专门处理类似这种数据。
因为我自己也写过 3 年后端,我自己肯定是不能容忍自己给到别人这样的数据的……
ISSSSSSS
2020-04-13 15:51:47 +08:00
一般前端会要求传 B: {a: '', b: '', c: ''} ,而不是直接把 B 中的 abc 干掉。
wanacry
2020-04-13 15:53:00 +08:00
@Bramblex2 #48 你已经有了自己的判断,而不是不懂来发问,那么你发帖的目的是来找认同的吗
chendy
2020-04-13 15:55:51 +08:00
@est #40 nullable 就 nullable 呗,有啥绕的
raynor2011
2020-04-13 15:59:24 +08:00
很多时候前端要求这么传,因为前端懒得自己构造
feelinglucky
2020-04-13 16:02:20 +08:00
一句话:null 和 empty 的区别,显然不合理
wusheng0
2020-04-13 16:08:21 +08:00
个人认为让后端先做个判断比较好
Bramblex2
2020-04-13 16:09:21 +08:00
@wanacry

我的认同感还没廉价到需要在这里找,我随便发篇文章都比这强。


我自己当然是有判断的,但我的判断当然也是不一定对的,所以才发帖让大家讨论。我又不是爬虫机器人,也没办法不代观点发帖啊……
alienx717
2020-04-13 16:11:48 +08:00
我做后端,我都觉得这个设计的有点烂,不友好
ruby0906
2020-04-13 16:17:31 +08:00
我曾经就是这样一个后端,和公司的前端产生了类似的纠纷,我觉得你可以借鉴一下。

当时我先写好了接口文档,前端看了也没提出什么意见,后来他实现的时候,提出各种要求,我没有同意。最后前端按我定的标准实现了。

当我以为一切都 OK 的时候,这个前端写了一封万字信,发给部门领导以及所有技术同事,描述他的心理感受,前后端标准,委婉吐槽等等。。

当时就觉得很难受,我要不要和他公司范围邮件辩论。不辩论吧,被人含蓄的吐槽。辩论吧,又是一件小事,懒得写俺么多字,又不想升级这件事。最后以我的忍耐告终。那感觉就像吃了一记闷亏。

所以,楼主你看看,要不要学习我那同事。。给公司领导和全部技术同事发一封吐槽信。。绝对比来这里找认同感心理会舒服多了。
MonoLogueChi
2020-04-13 16:22:41 +08:00
感觉不合理,不是固定结构不合理,是输出 '' 代表 null 不合理。

具体固定结构是否合理,还要看具体使用情况,我是搞后端的,一般我会输出

{
“A": { "a": "a", "b": "b", "c": "c" },
"B": { "a":null, "b": null, "c": null },
}
Hstar
2020-04-13 16:22:53 +08:00
这破结构我知道,前端需要,因为他们懒得判断 B 这一层到底是不是一个空对象,直接进入最后一层去判断
后来吃饱了趁着还构造一个这样的结构啊

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

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

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

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

© 2021 V2EX