前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TW洞见 | 周哲武:开发过程中的第三方依赖

TW洞见 | 周哲武:开发过程中的第三方依赖

作者头像
ThoughtWorks
发布2018-04-20 15:55:33
6210
发布2018-04-20 15:55:33
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

“聪明”的本地模拟服务

现在,越来越多的应用都开始面向服务架构,这意味这更好的重用性;一个设计良好的服务,不仅可以被网站使用,也可以被各种移动应用使用。但是世界上没有免费的午餐,在网站的开发过程中,如果依赖于第三方服务,很可能存在这样的问题:另一个团队正在开发这些第三方服务,他们也在不断的部署这些服务,服务经常不可达。

这会导致两个问题,首先功能测试失败,build失败,代码无法提交;其次,很多前端的功能需要依赖数据,这些服务不可达,就意味着没有数据,那么前端的功能开发也被阻塞了。

这种情况下,一般的做法是在项目中构建一些假的服务(以下统称本地模拟服务),直接返回静态的数据,稳定可靠;

然后,所有的测试都依赖于本地模拟服务, 不稳定的第三方服务就被隔绝了,程序员们就可以无忧无虑的提交代码,但好景不长,随着时间的推移,新的问题又来了。

前面我们已经假定,第三方服务也在开发中,在不断的变化中,一段时间后,那些本地模拟服务返回的数据已经失效。无奈地程序员们手动的更新了本地的静态数据,没过多久随着第三方服务的变更,这些静态数据有失效了。

写到这里,大家肯定在想,如果本地的静态数据能能够随着第三方服务的变更而更新,就不会向上面那样痛苦了,也就是说,我们需要的不是简单的静态数据,而是一种更加“聪明”本地模拟服务,它能够:

  1. 在第三方服务失效的时,返回本地静态数据。
  2. 如果第三方服务可用,它就变成代理,负责转发请求和响应;然后更新本地的静态数据。

这样“聪明”的本地模拟服务,不仅能够有效的隔离真实服务的不稳定,还能够依据这些不断变化的第三方服务,自动的更新本地静态数据。

部署

使用了这样的“聪明”的本地模拟服务,貌似一切都完美了。它完美的隔离了第三方服务,但是,有个新的问题来了,怎么知道第三方服务真的不可达了,很多情况下,我们需要及时的得知第三方服务的状态,以便于尽快的通知其他团队来修复这些问题。在我们的项目里,我们专门这对这些第三方服务创建了集成测试,这些继承测试在build阶段不跑,而是在build跑完以后触发,这样一旦功能测试过了,也就是build是好的,但是集成测试失败了,我们就能立即得出结论,第三方服务不可达了,关于部署和pipeline,将在接下来的文章中描述,这里先挖个坑:)。

实现

事实上,早就有 VCR ,能够用来缓存http请求和应答,以key-value的方式存储,key是request.

受VCR的影响,在java的世界里,有 Betamax, 通过annotation的方式来缓存http交互。基于Betamax,我们只需要少量的代码,就实现了上面的“聪明”的本地模拟服务。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 思特沃克 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档