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

问题描述

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

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

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

相关代码

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

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

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

阅读 2.2k
1 个回答

搞一层网关呗。

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏