关于接口返回值设计问题:服务之间内部调用接口的返回值类型需不需要跟客户端接口保持一致?

2021-06-13 00:07:29 +08:00
 polyang
现在盛行微服务,有些接口是仅供服务之间内部调用的,有些接口是提供给客户端的,那么问题来了,这两种类型的接口返回值类型需要保持一致吗?你们是怎么设计的?


我为什么会有这么疑问呢,因为我在实际开发中发现,如果返回值类型保持一致的话会有一些不方便的地方,比如,客户端接口的返回值一般会有 code,它的值可能会是 200,404,400,500 等等,但服务之间内部调用接口根本不关注这个,只需返回对象里有个布尔类型的变量告诉我调用其他服务到底成功与否就行了,鉴于此,是否可以设计出两种返回值类型?
1906 次点击
所在节点    程序员
9 条回复
xiangyuecn
2021-06-13 00:12:46 +08:00
“但服务之间内部调用接口根本不关注这个” 不管你是不是内部服务还是客户端,只要你调了接口,你就是客户端。 你在纯粹的增加复杂性和心智负担。
dayeye2006199
2021-06-13 02:51:56 +08:00
应该保持一致性,像上面说的,内部客户也是客户。
你这个 code 检查一下是否在某一段范围内,判断调用是否成功不行吗?
polyang
2021-06-13 08:34:26 +08:00
@xiangyuecn
@dayeye2006199 你们说的确实有道理。
xuanbg
2021-06-13 08:47:19 +08:00
就不能加个布尔类型的 successful ?
xuanbg
2021-06-13 08:48:57 +08:00
客户端一般都不关心 code 是啥,只要不成功,抛出 error message 就完事。
IvanLi127
2021-06-13 09:40:03 +08:00
你觉得客户端会在意这种 code 嘛?可能人家压根也没怎么用过呢 所以你也可以不用呐
chenshun00
2021-06-13 10:31:25 +08:00
参考下阿里云的设计应该内外都是保持的一致的,直接暴露的 API,然后不论是内部还是外部都是调用的 API 。
newtype0092
2021-06-13 12:03:43 +08:00
如果你说的客户端是一个具体的 toC 的 App,那只应该调用专门给这个 App 提供服务的后端,如果需要其他通用服务,也应该通过 App 后端代理。

如果客户端是指通用服务的请求方,那么不应该区分内部外部。
xiaofan2
2021-06-13 13:13:25 +08:00
其实一般对外是 API 接口 对内的话都是 rpc 吧 我理解是不是就没有你的这种困扰了?

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

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

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

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

© 2021 V2EX