基于Restful service技术的即时通信系统接口设计 廖露露
  摘要:近年来,企业即时消息(EIM)的发展已成为热点。现有的企业即时通信产品存在各种问题,主要有:1、采用的通信协议各不相同,导致各大厂商之间产品难以互联互通。2、各大厂商的功能业务各不相同,系统和设备自成体系,增加了集成难度。3、出于自身利益的考虑,各大厂商不对外开放自己的接口,阻碍了统一通信的发展。针对以上问题,本文引入REST(Representational State Transfer,表述性状态转移)技术,提出了一种针对EIM需求量身定制的基于Restful Services的API,开发人员可以重用和调用EIM系统中应用的API,以进行进一步的开发。
        关键词:企业即时消息,EIM,Restful Services,重用,接口
1、绪论
        随着Internet的发展,人们逐渐致力于EIM产品。因此,制造商开始开发自己的产品。由于自身利益的考虑,现有的具有专有协议的EIM系统都向其他人隐藏了它们的接口,例如微软的Lync [1],华为的eSpace[2]和腾讯的RTX [1],这使得产品难以连接,阻碍了统一通信的发展。此外,不同的企业有不同的要求。现有产品很难根据用户要求进行扩展。许多研究人员和开发人员正在设计通用解决方案,以更好地支持Web API的重用[3],因此,需要可扩展和开放
的EIM API。因此,我们需要引入Restful Services来解决这些问题,Restful Services是在Web上发布的,充分利用并正确使用HTTP的软件服务协议[4]。随着所有技术朝着API方向发展[5],它的重要性可能会继续快速增长。越来越多的Web发布的服务都是使用REST设计的,例如facebook、amazon [6]和IBM [7]等等。
        本文介绍了一种Restful Services技术,提出了一种用于EIM中客户端与服务器之间通信的可扩展API构建方法,建立了一种灵活的EIM分层且面向资源的体系结构,基于该体系结构和API设计并实现了EIM系统,该系统符合企业通讯需求。
2、Restful service技术
        REST(全称:Representational State Transfer,表述性状态转移)架构将所有的事物都抽象为一种资源,并赋予一个唯一标识的资源标识符URI,通过HTTP请求去处理和传输资源的状态[9]。REST架构主要是针对web应用而设计,目的是降低开发的复杂性,提高系统的可伸缩性,该架构主要包含了4个核心原则[10][11]:
        (1)所有资源的资源都有唯一的资源标识符URI。
        (2)使用标准的HTTP方法(GET、POST、PUT、DELETE)对资源进行操作。
        (3)资源的表述形式是多样的,例如XML、JSON、XHTML等。
        (4)服务端是无状态的,通过无状态的通信,避免了大量客户端并发时对服务器性能的影响,也便于实现服务器的动态可伸缩性。
        在 REST 架构风格的系统中,核心要素是资源的URI 表征方式,资源统一标识符模板定义如下:
        /{资源名字空间}/{资源地址}.{资源表现形式}?{资源请求参数}
        (1)资源名字空间:解决异构系统中资源名字冲突问题。此外,名字空间可以将目标资源路由到对应系统的特定模块中。例如:/user/name 表明目标资源在user 目录下的name 模块中。
        (2)资源地址:用以获取指定系统中资源对象的表现。例如,/version/notice表示版本号为1 的系统拥有notice功能。
        (3)资源表现形式:比较常见的形式有XML 文档、HTML网页文档、JSON 数据格式等。
        (4)资源请求参数:当使用HTTP GET 方法请求资源时,可在URI 尾端添加资源的过滤参数。
3、关键技术
        EIM系统包括客户端和服务器,服务器通过基于Restful服务的API为客户端提供服务。
客户端为用户提供即时消息(IM)功能。下面介绍一些基于EIM系统的Restful服务的API协议,该协议基于HTTP方法,并带有JSON格式的转换数据。
Session: 提供认证、鉴权功能,能够生成access_token并进行验证;会话的主要功能包括登录身份验证,刷新客户端会话的令牌并注销。表1显示了登录的API协议。在表1中,access_token表示在系统中执行指定操作的授权。如资源路径所示,每个access_token都属于一个会话。令牌通常由会话服务器移交给用户的客户端。除了知道令牌标识符(这是一个随机UUID)之外,不需要其他身份验证。用户登录后,系统将返回到access_token。只有具有access_token的客户端才能执行其他操作。为了确保系统安全,access_token的过期时间设置为2小时。因此,会话模块提供了一个API以更新access_token。
restful接口调用实例表1会话接口协议

 
 
客户端调用“ / session / login”登录系统,然后将其参数同时发布到服务器。会话服务器使用JSON格式参数接收和管理请求,然后向客户端返回一些重要的参数,例如“ uid”:标识用户,
“ access_token”:其他服务器的访问凭据,“ client_id”:标识客户端(因为用户有多个客户端),“ server_url”:其他服务器的地址列表。只有获得“ access_token”和“ server_url”的客户端才能向服务器提交其他请求。
Message:消息定义为客户端之间的通信,消息类型包括文本,图片,链接,语音,文件和视频等。表2以文本消息为例来说明消息接口设计。
表2. 消息接口协议

 
在表2中,ZID格式类似于“对象类型/对象ID”,对象类型包括用户标识(uid)或组标识(gid)。在返回数据中,参数“unread”标记消息是否已读,“ from”、“ to”是发送者和接收者的用户标识,客户端发布“ / message / read”以读取消息,消息服务器通过发送消息的接口的消息标识(id)识别消息。
总结
        本文介绍了一种restful service技术,提出了一种用于EIM中客户端与服务器之间通信的可扩展API的构建方法,建立了一种分层且面向资源的体系结构,由于灵活的分层以及基于
面向资源的Restful服务技术的API,该系统具有可扩展性和灵活性。因此,它很容易被开发人员重用和调用。
参考文献
[1]周文永. 基于 XMPP 协议的企业级 IM 关键功能的研究及其在 IOS 端的实现:[硕士学位论文]. 广东:华南理工大学, 2013.
[2]郭鑫杰. 即时通讯系统的设计与实现:[硕士学位论文]. 江苏:南京大学, 2012.
[3]王潇雨. 北电与 IBM 携手打造统一通信[J]. 中国信息界, 2007 (2): 40-40.
[4]李竞. 华为与中兴进入欧洲统一通信市场的策略分析:[硕士学位论文]. 西安电子科技大学, 2011.
[5]孟伟. 企业即时通讯系统服务器的设计与实现:[硕士学位论文]. 浙江:浙江工业大学, 2013.
[6]topy_iask.统一通信[EB/OL].[2013-12-18] baike.baidu/link.
[7]蔡德辉. 企业级即时通讯系统设计与实现:[硕士学位论文]. 广东:中山大学, 2012.
[8]Dink. IDC:2012年上半年中国统一通信市场规模达5.6亿美元[EB/OL].[2012-12-23]  www.199it/archives/86459.html.
[9]Raphael J Cohn, Richard J Coppen. MQTT Version 3.1.1[EB/OL].[2014-10-29] / mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html.
[10]Cholia S, Skinner D, Boverhof J. NEWT: A RESTful service for building High Performance Computing web applications[C]. Gateway Computing Environments Workshop (GCE), 2010:IEEE, 2010:1-11.
[11]Richardson L, Ruby S. RESTful web services[M]. Mike Loukides, USA:O'Reilly Media, Inc, 2008:5-371.