基于OAUTH、OPENAPI、REST技术的快速开发云平台架构的设计与实现
2016-10-21段玉龙
段玉龙
摘 要:本文基于OAUTH、OPENAPI、REST等技术设计了一个快速开发平台框架,框架具有松耦合、高可扩展性、开发快速等特点。本平台的主要优势在于:1.大规模系统拆分;2.OpenAPI在控制器层进行设计,同时采用REST风格;3.界面调用OpenAPI采用JQuery的Ajax调用方式;4.可重用组件。
关键词:OAUTH;OPENAPI;REST;开放平台
伴随互联网、智能手机技术的飞速发展,软件行业也面临着新的挑战。传统企业级软件已经转变为小系统集成的大规模软件,传统的先充分论证需求分析,然后按软件工程的理论一步步按部就班的开发模式已经不适应当今软件行业发展的速度了。另外,现今的软件需求也变的越来越专业化、精细化,一个应用或App只关注一个细节一个点,一旦需求确认,需要在尽可能短的时间研发出来并上线,这样才能更快的占有市场,同时注意和使用用户互动、促进用户反馈意见,然后在使用中迭代更新升级系统,积累了一定用户量后再逐步扩展其他附带功能。
这就要求我们开发软件模式需要从传统软件按部就班的开发模式转变为敏捷、快速的迭代开发模式,敏捷快速不是单纯的图快,同时要兼顾系统的稳定性、可扩展性、鲁棒性等各方面的性能的考虑,以便将来更好的迭代和扩展。本文借鉴敏捷开发、开放平台、OAUTH,REST等技术,设计了一个快速开发平台框架:每个待开发系统作为独立子系统开发,最后集成到平台中,提倡子系统专一化,一个子系统只干一件事,如果业务比较复杂则拆分为多个子系统开发;子系统直接通过开发平台技术通过OPENAPI相互调用,OPENAPI设计遵从RESTFUL风格设计,每个OPENAPI作为一个资源存在,调用使用HTTP协议,采用JSON格式传递数据,这样各子系統之间更具独立性,耦合度更低,可扩展性更强;平台本身已经集成了基础服务组件、日志组件、权限组件、认证组件、调度组件、事务组件,待开发系统只需要引入相应的包并做简单的配置即可使用这些基础组件,使开发人员把主要精力集中在具体业务逻辑上。
1开发平台框架设计
本平台的框架设计图如图1。
本文设计的快速开发平台以各子系统作为云服务单元,即系统开发过程中的一个独立项目,下面本文以一个类似淘宝网的小型购物网站为例介绍下本平台的具体设计和研发过程。
1.1 系统拆分
子系统的规模要适当,不要太大,如果待开发的系统较大,对系统进行拆分,使每个子系统只专注一项业务,粒度要适中,保证每个子系统开发简单高效。
本例中购物网站系统规模较大,根据具体业务,我们拆分为会员管理子系统、商品管理子系统、订单子系统三个子系统,其中支付和物流部分使用第三方平台的Open API,每个子系统作为独立工程研发,可以分配不同研发人员进行独立研发,而且每个子系统相对简单, 研发人员不必陷入复杂的业务逻辑上,大大提高了研发效率。如果需要调用其他子系统接口时,使用Open API调用,如2.2节所述。
图1 开发平台框架
1.2 子系统Open API设计与调用
每个子系统采用OPEN API为其他子系统或第三方系统提供接口,每个OPEN API使用RESTful风格设计,调用时使用HTTP协议调用,数据交换格式采用JSON格式。
下面以购买商品为例说明各子系统Open API的设计和调用过程,如图2所示。首先调用认证子系统登录认证(2.3节详细介绍),然后调用商品管理子系统查询商品API,选中要购买的商品后,调用订单子系统的购买API,系统自动调用会员管理子系统的获得会员邮件地址信息API获得邮寄地址信息,用户选中或填写邮寄地址,调用订单子系统的生成订单API生成订单,并置订单状态为未支付。用户点击支付按钮,调用第三方支付系统如支付宝、网上银行等,等待第三方系统返回结果,接收到支付成功结果后调用订单子系统的修改订单状态API把订单状态置为已支付状态。然后系统物流人员根据订单调用第三方物流系统发货,系统等待物流返回结果,接收到物流返回成功结果后调用订单子系统的修改订单状态API把订单状态置为成功状态。
图2 购买商品各子系统Open API调用流程
1.3 认证子系统
认证子系统已集成到框架中,为其他子系统或第三方系统提供认证服务,采用OAUTH技术实现,如图3为用户访问会员管理子系统的认证过程。
用户访问会员管理子系统,如查看个人资料等;系统自动跳转到认证子系统的登录页面,提示用户输入用户名密码进行授权;用户输入用户名密码,由认证子系统进行密码验证;验证成功后,认证子系统会返回给会员管理子系统一个授权的令牌(Access Token),会员管理子系统或其他系统通过此令牌通过认证子系统的Open API即可获得用户的基本信息。
图3 获取会员物流信息
1.4 权限子系统
权限子系统也已集成到框架中,为其他子系统或第三方系统提供权限管理服务,采取RBAC模型(基于角色的访问控制)实现,使用角色实现用户和权限的逻辑分离。
各个子系统以Open API的形式为其他系统提供调用,但不是任何系统或角色都可以随便调用这些API的,需要具有一定的权限控制。如修改图2中的修改订单状态接口对于普通会员是不开放的,只针对后台管理员有效。权限子系统已经实现本功能,开发人员只需在权限配置界面配置相应的角色,及该角色受限访问的资源。
1.5 可重用基础组件
基础组件为子系统开发提供一些常用的组件支持,子系统开发时首先引入组件的jar包,然后在web.xml或Spring配置文件中引入相应的配置即可使用组件,使用非常方便。
其中基础服务组件提供对某数据模型的增删改查操作的支持,和RESTFUL风格中的四个HTTP动作一一对应,开发人员不需要再关心单个数据模型的增删改查逻辑,只需要关心自己业务系统的复杂业务逻辑。日志组件提供系统对日志的支持等。
2 结语
本文基于OAUTH、OPENAPI等技术设计了一个快速开发平台框架,框架具有松耦合、高可扩展性、开发快速等特点。同时介绍了本平台中的一些设计原则:大规模系统拆分;OpenAPI在控制器层进行设计,同时采用REST风格;界面调用OpenAPI采用JQuery的Ajax调用方式;可重用组件。
参考文献:
[1] 朱蔚恒,周伟,龙舜.开放平台解决方案及其安全策略研究[J].计算机工程.2012(12):265-267.
[2] 时子庆,刘金兰,谭晓华.基于OAuth2.0的认证授权技术[J].计算机系统应用.2012(03):260-264.
[3] 丁波,晁爱农.基于Struts2框架的AJAX开发研究[J].计算机工程与设计.2009(16):3910-3913.
[4] 相方莉.云计算基础设施中的性能瓶颈的识别和优化[J].计算机系统应用.2013(12):168-172.
[5] 李淑芝,刘锋,杨书新.基于云仿真的Web服务选择研究[J].计算机应用研究.2013(04):1069-1071.
[6] 李小宁,李磊,金连文,等.基于OpenStack构建私有云计算平台[J].电信科学.2012(09):1-8.
[7] 胡晓玲,强桂.基于云计算的教育技术实验平台构建——以3D MAX课程为例[J].实验技术与管理.2012(08):88-91.
[8] 罗国玮,兰瑞乐.基于云计算的高校科研实验平台构建研究[J].实验技术与管理.2012(04):115-117.
[9] 马少兵,马自卫.数字图书馆私有云平台的构建研究和应用开发[J].现代图书情报技术.2011(04):9-16.