如何更好的应对多个服务数据拼装问题?

发布于 2022-09-11 15:38:57 字数 432 浏览 10 评论 0

问题描述

比如:
商品模块是一个单独服务对外暴露一些 rest api接口,对外提供商品图片连接,商品基本信息等,
购物车是一个单独的模块(比如该模块包含一个cart表 里面记录了 product_id,num),
在这种先要把用户购物车的商品ID拿到才能在换取商品信息的情况下,要把这两个模块组装后把数据返回
如何更好的解决这个问题?

问题出现的环境背景及自己尝试过哪些方法

个人感觉很不好的解决方案:首先去购物车模块去取用户的购物车下的 product_id,然后在购物车模块内部在去发送 http请求 去请求商品模块的信息~

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

期待更好的解决方案,自己想到的方案 耦合太高~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巴黎夜雨 2022-09-18 15:38:58

搞一层网关呗。

                   /* 暴露给外界的接口 */
User -> Gateway -> getCartProductInfos -> { 
                                            cartService,
                                            productService
                <- 组装信息后返回       <- }

只是这样搞的话,相当于说外部就不会感知到有 cartServiceproductService,只知道有个 getCartProductInfos 接口。那些服务就只有系统内部相互知道。

好处是在网关入口 (getCartProductInfos) 做一次权限校验即可,后续都可以认为是安全的(如果需要二次/额外验证那么在服务处再做一次即可,灵活度很高),另外以后服务之间再拆分时,只要网关对外接口不变,前端(包括 WEB 和移动端,如果有的话)方面就不需要改,即网关后面的东西再怎么迭代升级,对前面的系统来说都是无感的;
坏处则是多了一层东西,个人觉得除非单纯做 Demo 性质的东西练手,都应该弄个网关,后续拓展会很轻松方便。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文