对接后端接口被挑战能力不行(吐槽贴,不会因为这个问题去挑战什么)

2024-04-29 09:58:45 +08:00
 svip0dd
原因:App 开发的时候,首页有 4 个相同的模块,在了解到数据是同一个服务提供的,所以希望后端在提供接口的时候能够一次将这个这四个模块的数据整体返回给我。

结论:服务端的大佬说为了保证接口的原子性,不要做太多业务上的事,他们会开发一个通用的接口,有几个模块让我调用几次。其次服务端考虑到后面可能其他的服务也会调用,所以希望能尽可能通用。

以上结论在前后端对接时他们时常用这个说法对我进行 pua ,我觉得我已经无法接受了,请问各位大佬,这种情况如何反驳?为了保证他们接口的原子性,我大部分页面通常都要 2-5 个接口,甚至更多,比如之前获取图片,因为他们的图片是两张表,一张是图片 id ,一张是 id 对应的图片地址。我只能先获取 id ,再用 id 去请求接口。但服务的通用性在这个说法我在长期对接中发现纯属扯淡,几乎只有我在对接且因为接口调用的多了增加各种复杂场景,如果没有处理好也会影响用户体验。
24466 次点击
所在节点    程序员
216 条回复
daysv
2024-04-29 11:24:49 +08:00
后端思路是对的,对前端一个潜在好处是不用等全部数据查完再渲染, 可以分接口分块渲染。
Peikon
2024-04-29 11:26:27 +08:00
@vacuitym #7 不影响后端可以在聚合接口兜底处理
Sfilata
2024-04-29 11:27:55 +08:00
我觉得这就是两码事,后端接口原子性是一码事,数据聚合又是另一码事。其实本质问题就是看新加的业务数据聚合层到底是谁做,如果后端负责就让他去做,如果要放到前端,那就你去做呗。写个 Promise.all 的事
kamilic
2024-04-29 11:30:44 +08:00
「比如之前获取图片,因为他们的图片是两张表,一张是图片 id ,一张是 id 对应的图片地址。我只能先获取 id ,再用 id 去请求接口」

这种完全就是 sql 的逻辑,客户端为什么要关心对接方的内部设计,把接口细节暴露出来增加对接方理解成本真的很好?

你对接的后端做着业务后端的工作,但用着基础服务的心态提供接口。同意前面大佬所说的,提供一层聚合层/业务后端层来解决这个问题。

我觉得客户端使用的接口就要提供视图所要求的数据,试想一下如果产品以 api 接口提供对外服务,提供这样的 api 能力,感觉客户得把你骂死。

自己人折磨自己人也是很正常,这些 dirtyworks 谁都不想做,但总是要做,就看公司内部话语权了。
dododada
2024-04-29 11:32:03 +08:00
@eastjoehan 你这个我见过,整个业务就一个接口,数据用协议来定义,统一加密处理,就是有的时候 body 有点大
darklost
2024-04-29 11:33:24 +08:00
上 graphql 然后把自己玩死;)
Hilong
2024-04-29 11:39:24 +08:00
也就是你们前端没有话语权,楼上还有让前端自己写 bff 层的,在我们这里直接怼后端,你怎么原子化跟我没关系,整合好了吐给我。后端也可以搞个 bff 层的啊
yuhuazhu
2024-04-29 11:40:53 +08:00
@Hilong +1
orzwalker111
2024-04-29 11:41:02 +08:00
@liumao “业务存路径”,哪天如果要统一清洗文件路径,这个工作量?附件系统也是一个单独的底层服务,对外只提供 id 是合理的。联表查询——附件一般是个大表,这块会不会有性能问题。另外业务中可能要获取这个图片的“大图、中等图、缩略图”,具体的文件和附件表甚至在两个不同服务中,比如“图服务”、“附件服务”,这块用两个接口去取附件数据也是很正常的设计,没有很呆逼。
Richared
2024-04-29 11:41:48 +08:00
如果后端只是提供能力,那么就前端做,我们在中间会有其他后端同事负责接口聚合给前端使用。看流程,如果就两个人,商量着来呗,谁活少谁做。
wolfie
2024-04-29 11:46:31 +08:00
聚合查询跟原子性没关系。看你们关系好不好、性格硬不硬。
图片地址那个 100% 后端问题。
Nich0la5
2024-04-29 11:52:31 +08:00
图片和图片 id 分开是大量图片的情况下可以自行进行动态加载吧,设计上没问题,不过听你说的样子好像你们这个项目其实没这个需求
darkengine
2024-04-29 11:52:54 +08:00
@cedoo22 200ms ,20ms ?你们用户跟服务器在一个内网吗?
ZGame
2024-04-29 11:53:22 +08:00
graphql 就是用来做这的
Nich0la5
2024-04-29 11:54:31 +08:00
@Nich0la5 #72 又想了下不对 这个地方完全没必要分两个请求
ZGame
2024-04-29 11:54:44 +08:00
我觉得要转换思维 不要和后端去对立 ,打个比方后端如果不做聚合的话,那么很多数据拼接的工作就需要在前端做 ,那你就可以多报工时,而且更好的是自己用 next.js 去做一层 bff 层, 反正让加工时就好了
wu67
2024-04-29 11:56:12 +08:00
单个后端应付多客户端的时候, 每个客户端要他写一套, 要写趴后端.
但是如果给通用接口, 某个特定客户端需要不同数据时再单独给你写, 他压力会减轻很多. 当然他自己聚合一下也行, 只是大部分情况开发时间都不允许他再继续加码罢了...

q: 大部分页面要 2~5 个接口?
a: 一个界面 10 个接口我都玩过... 还是我接手之后把接口往上层组件提取出来了的结果, 不然每开一个对话框又要请求几次重复的接口...

当然就事论事, 请求图片这个我也觉得有点离谱, 不知道怎么吐槽. 反正我现在写前端都是自己组数据, 管他后端怎么写, 反正有足够的数据给我就行, 扯皮太累了.
yxd19
2024-04-29 12:00:50 +08:00
@0x1247c15 美其名曰
GotKiCry
2024-04-29 12:08:10 +08:00
上面发癫,你下面只管在代码拉屎就完事了
qweruiop
2024-04-29 12:18:29 +08:00
加一层 graphql 直接解决问题。

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

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

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

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

© 2021 V2EX