系统与第三方交互时,一般采用Http(s)+xml或webservice。有时出于各种考虑,我们不希望采用Axis等重型手段,相反地,希望以轻量级的方式来实现。但是轻量级的实现方式需要我们手工编写各种代码,随着系统的复杂对提高,我们将遇到各种问题,比如:第三方的API7发生变化;本系统的重复代码块增加;Copy的代码散落各处;各种配置信息无法统一起来;业务的扩展需要调用更多第三方API。
基于这些问题,结合自己的工作经验,我提出如下方案,与大家交流。(由于工作的缘故,并不能把相关源码上传,只能简单描写)
一、了解哪些角色可以帮助系统:
1、 ClientHelper:负责第三方,定义交互的基本流程。比如:采用什么方式传输数据,超时时间多久,序列化和反序列化数据。
2、 Callback:第三方API回调类。定义了第三方API的地址,请求对象,收到正确的数据后如何处理(onResultReceived(Result result))
3、 Config:存放相关的配置信息,但是不是所有的配置信息都在里面
4、 Model:各种请求对象
5、 Factory:根据各种业务要求,生成各种请求对象,
6、 Facade:把第三方API封装成合适系统调用的函数。
二、确认角色之间的交互过程:
1、 ClientHelper使用Callback提供的信息与第三方交互。代码如下:
Public UserRequest getUserRequest(String userId){
UserRequest request = new UserRequest();
request.setUserId(userId);
request.setVersion(Config.CurrentVision);
return request;
}
调用关系如下:
2、 Factory根据Config和业务要求生成各种Model 。交互代码如下:
Public UserRequest getUserRequest(String userId){
UserRequest request = new UserRequest();
request.setUserId(userId);
request.setVersion(Config.CurrentVision);
return request;
}
调用关系如下:
3、 Façade如何根据业务要求,调用第三方API的。交互代码如下:
Public UserInfo getUserInfo(String userId){
UserRequest request = Factory.getUserRequest(userId);
CallBack callback = new GetUserCallback(getUserInfoRequest);
GetUserResponse response = ClientHelper.doRequest(callback);
return new UserInfo(response.getUserId,reponse.getUserName);
}
三、如何应对变化:
1、如果需要使用新的API,getLoginHistory,怎么处理?
a) 增加的新的Model:GetLoginHistoryRequest,GetLoginHistoryResponse,
b)给Factory增加新的函数createXXXXRrequest
c)现实新的Callback类:GetLoginHistoryCallback
d) 给Façade,添加一个新函数
2、第三的API的参数发生了变化,如何处理
a)修改相关的model,
b)修改Factory类
3、第三方服务发生更变
a)修改Config的配置信息
四、背后的想法
1、采用【模板+回调】的方式来处与第三方的交互。与第三方的交互流程是不变的,变化的是API。不同的API,其输入,输出都不一样,因此用【回调】把变化的部分总结到一起。
2、使用Factory模式,隐藏各种请求对象的创建过程。
最后,请原谅我的排版和UML图,它们不是很标准,但已经能够表达我的意思!
- 大小: 12.3 KB
- 大小: 8 KB
- 大小: 8.2 KB
分享到:
相关推荐
本文档将详细阐述第三方支付系统的总体设计方案,涵盖其功能需求、技术需求以及设计原则。 1.1 文档说明 本文档旨在为开发团队提供一个清晰的指导框架,以便于理解项目的整体结构、目标和实施策略。它涵盖了项目...
总结,"第三方单点登录Ecology方案"是构建一个高效、安全的多应用登录生态的关键步骤,它涉及到身份验证协议、安全性设计、系统集成等多个IT领域的知识。通过这个方案,企业可以提供更加便捷、统一的登录体验,同时...
本文档是关于第三方支付系统总体方案的设计说明书,旨在为读者提供一个全面理解该系统设计思路、目标及实施细节的指南。以下是对文档各部分的详细解释: 1.1 文档说明:这部分通常包含文档的创建目的、受众、以及...
标题“行业分类-设备装置-基于开放平台的第三方业务系统与用户交互的方法和装置”揭示了一个专注于开放平台技术,特别是如何通过这样的平台实现第三方业务系统与用户之间的高效、安全交互的主题。描述中的信息进一步...
在当前业务环境下,cloud-business-wrapper-service服务扮演着与OpenApi交互并推送数据至多个第三方平台的角色。随着合作伙伴数量的增加,服务承载的压力日益增大。现有的单个服务已经扩展到了五个实例,但频繁的...
总的来说,这个HTML5响应式第三方登录页面模板涵盖了前端开发的多个方面,包括HTML5语法、响应式布局、第三方登录集成和模板设计。学习并应用这些知识点,开发者可以创建出适应各种设备且用户体验优良的登录注册页面...
本建议书的主要目的是阐述第三方支付系统的必要性、需求分析、系统设计目标及原则,以及详细的系统架构设计方案。它将为XX集团的决策者提供技术性的指导,帮助他们理解并评估该系统实施的可行性和价值。 1.2 阅读...
综上所述,通过对第三方物流企业仓储管理系统的研究与开发,我们可以看到,采用C/S架构结合三层体系结构的设计方案,能够有效地支持复杂的业务流程,并通过集成计费管理等功能进一步提升了系统的实用性和灵活性。...
综上所述,这个"ecshop第三方登录插件"是一个完整的解决方案,它集成了QQ、淘宝和新浪微博的API,允许用户通过这些社交媒体账号一键登录,同时提供了一个强大的后台管理系统,让商家能够有效地管理和监控第三方登录...
ActiveX是微软开发的一种技术,允许不同应用程序之间共享控件和数据,而LabVIEW能够通过引用ActiveX控件来与支持此技术的第三方软件进行交互。 具体步骤如下: 1. **获取第三方软件的ActiveX控件**:首先,你需要...
"MYSQL第三方库文件"通常指的是为了扩展MySQL功能或者优化特定操作而引入的非官方库或模块。这些库文件可能包含了各种功能,比如连接管理、数据处理、性能优化等。下面将详细介绍MySQL第三方库文件的相关知识点: 1...
仿美萍人事管理系统则继承了这一优点,通过使用C#编程语言和第三方控件,实现了与原系统类似的用户界面和功能特性,为企业提供了一种高效、便捷的人力资源管理工具。 二、C#语言的应用 C#是一种面向对象的编程语言...
除了平台原生的支持,还有很多第三方开发工具和框架,如React、Vue.js和Angular等,它们为移动应用开发提供了基于JavaScript的解决方案,使得前端开发者也能参与到移动应用的构建中。这些框架通常具有丰富的生态系统...
第三方物流(3PL)管理系统是一种为第三方物流服务提供商或使用第三方物流服务的企业所设计的信息管理系统。它能够帮助物流企业在运输、仓储、配送等多个环节实现信息化和自动化管理,从而提升物流效率,降低物流...
本示例探讨的主题是如何让第三方应用程序如Autocad、SolidWorks等在自定义的程序窗口中运行,实现这样的功能可以极大地提高工作效率,尤其在进行设计、绘图或者协同工作时。 首先,我们要理解这个技术的核心是利用...
【地铁档案管理系统与第三方应用系统的数据归档接口解决方案】 地铁档案管理系统是负责收集、存储和管理地铁运营过程中产生的各类文件和数据的重要工具。在实际运作中,这些系统往往需要与多个业务系统进行交互,...
这款设备原厂配备了自家的操作系统,但部分用户可能会出于个性化需求或优化性能的目的,选择将其刷入第三方系统。然而,有时候用户可能希望回归原厂设置,将路由器恢复到出厂状态,这时就需要用到“京东云无线宝一代...
本文档主要介绍了如何安全、有效地利用IMI系统与第三方平台进行集成,包括用户信息的使用、安全机制的设计以及技术实现细节。文档旨在为开发者提供一个清晰的指南,确保在对接过程中遵循最佳实践,减少潜在的安全...
用户通过第三方平台(如微信、QQ、微博等)授权应用访问其基本信息,应用通过获取到的令牌(Token)与第三方服务器交互,获取用户的登录状态和信息。 2. **OAuth协议**: - OAuth允许用户提供一个令牌,而不是...