前端这样依赖后端接口合适不?

2019-12-20 08:29:26 +08:00
 xushengbin888

后端接口中返回了一个 json:

{ "favorite" : [], "most_visited" : [], "recently_visited" : [], "recently_visited_by_day":{} }

注意前三个 key 的值是 array,最后一个是 object

需求是页面需要展示前三个 key 对应的数组的内容,于是前端就对这个字典做了 for 遍历,输出了前三个 key 的内容,而且前端也考虑了,后续如果接口返回了更多的 key,他就直接不用改代码,就兼容了。

我作为后端,我觉得这样不合理,理由是:

前端这种处理,实际上是依赖了 hash 字典 key 的顺序,这不符合常规的习惯。理由是:

  1. 后端开发在不知道这个依赖的情况下,如果改了 key 的顺序, 前端页面展示顺序就反了。 实际上,确实就遇到 了问题,产品要求改一下三个模块的展示顺序,前端让我接口去改 key 的顺序
  2. 如果后端在这个接口加了一个字段,本来谁都会认为这个改动不会对前端造成任何影响,实际上就会影响到。

这种非常规的处理,就很容易导致 bug

如果前端确实觉得 for 遍历处理方便,应该和后端沟通,把接口返回格式改为: { "list" :[ [], // 对应 key favorite 的值 [], // 对应 key most_visited 的值 [] // 对应 key recently_visited 的值 ] "recently_visited_by_day":{} }

5817 次点击
所在节点    前端开发
25 条回复
hideonwhere
2019-12-20 13:37:10 +08:00
穷举你见过没 还有 0E-10
fengmumu
2019-12-20 14:10:59 +08:00
我觉得这事出现在我和我的后端老哥身上,我会被打屎,单纯为了自己爽不从项目考虑有点,,
souths
2019-12-20 19:23:26 +08:00
前端有问题
Tokin
2019-12-21 01:00:38 +08:00
对顺序有需求,后续还可能会增加字段,那你返回这样的对象前端也不好处理啊。
如果当初需求明确是上面这样的话,我觉得你后端也有问题。如果需求仅仅只是“需求是页面需要展示前三个 key 对应的数组的内容”没有明确要求顺序,那我觉得直接遍历跟菜也没什么关系。
xushengbin888
2019-12-21 11:51:37 +08:00
@Tokin 没有明确顺序,返回三个 key,就是三个模块的数据。前端觉得遍历方便,正好也依赖了后端的接口的顺序。
如果要依赖顺序,前端应该提要求,改接口格式,返回 list

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

https://ex.noerr.eu.org/t/630699

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

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

© 2021 V2EX