一种面向REST架构风格的Web服务快速开发方法与流程

文档序号:11276051阅读:536来源:国知局
一种面向REST架构风格的Web服务快速开发方法与流程

本发明涉及一种面向rest架构风格的web服务快速开发方法。



背景技术:

webservices是一种部署在分布式web应用上的对象,是构建分布式web应用程序的模型,建立在以xml为主的、开放的web规范技术的基础上,能在所有支持internet通讯的操作系统上实施运行,具有更好的开放性,是实现可互操作的分布式web应用平台。webservices基于三种角色,即服务提供者、服务注册中心和服务请求者之间的交互。涉及发布、查找和绑定操作,这些角色和操作一起作用于webservices组件。典型情况下服务提供者将webservices的服务描述发布到服务注册中心。服务请求者使用查找操作从服务注册中心检索服务描述,然后使用服务描述与服务提供者进行绑定并调用webservices实现交互。

rest是英文representationalstatetransfer的缩写,中文译为“表象状态传输”、“具体状态转移”或“表现状态转移”。rest是一种架构风格(或模式),不是一种具体的标准或架构;rest不是一个协议,它是对web体系结构设计原则的一种描述,是一种对于服务器的更加有效的抽象方式,是一种基于资源的服务访问架构风格。rest结合了一系列规范,从而形成了一种新的基于web的架构风格,它带来的是一种全新的web开发过程中的思维方式:通过uri来设计系统结构。根据rest设计原则,每个uri代表一个资源,而整个系统就是由这些资源组成的。使用rest和面向资源架构(roa)原则的webservices通常称为restfulwebservices或端点。restfulservices具有以下特点:

1.client-server结构:将客户端与服务器端分离,将用户界面与数据存储分离,使得不同用户终端共享相同的数据成为了可能。

2.无状态:要求每个http请求都是完全孤立的。

3.命名资源:restfulwebservices也是资源,也有唯一的uri标识。

4.互联资源表示:restfulwebservices提供的表示通过uri实现互联,客户可以实现客户状态的自维护性。

5.中间组件层:在客户和资源间使用代理服务器、缓存服务器、网关等提高效率、增强安全。

6.从http头中获取统一接口和资源地址:对服务资源的所有动作和要访问的服务器资源都从http统一接口和uri中得到,使代理服务器、缓存服务器能很好的协调工作。

7.可以使用简单有效的安全模型:rest中很容易隐藏某个资源,只需不发布它的uri;可对每个uri的四个通用接口设置权限;也可以通过堵塞非get请求把资源设置为只读的。

随着restfulwebservices的兴起,rest服务开发框架层出不穷,例如:jersey、resteasy以及restlet等。jersey框架是采用java语言开发rest服务的开源框架,它支持jax-rsapi并作为jax-rs(jax-rs即javaapiforrestfulwebservices,是一个java编程语言的应用程序接口,支持按照表述性状态转移(rest)架构风格创建web服务。jax-rs使用了javase5引入的java标注来简化web服务的客户端和服务端的开发和部署)的参考实现。jersey框架不仅仅是jax-rs的参考实现,它还提供了自己的api,这些api继承jax-rs工具包,提供了附加功能和实用程序,进一步简化rest服务和客户端的开发。另外,jersey公开了大量扩展spi,使开发人员能够更好地继承jersey来适应各自的需求。resteasy是jboss的一个开源项目,提供各种框架帮助你构建restfulwebservices和restfuljava应用程序。它是jax-rs规范的一个完整实现并通过jcp认证。作为一个jboss的项目,它当然能和jboss应用服务器很好地集成在一起。但是,它也能在任何运行jdk5或以上版本的servlet容器中运行。resteasy还提供一个resteasyjax-rs客户端调用框架。能够很方便与ejb、seam、guice、spring和springmvc集成使用。支持在客户端与服务器端自动实现gzip解压缩。

ibm公司的研究员maximilien,e.michael提出一种swashup-therubyonrailsservicesmashup方法,该方法从rosettanetpip3a4消息开始建模,使得消息的xsd类型直接映射到使用dsl注释的ruby类。然后使用ruby来定义将数据元素用作纯ruby对象的调解过程。最后利用rails框架来访问soap服务以及定义网络端点。该方法虽然能够通过少量的代码完成web服务的开发,但必须依赖于ruby语言实现,有较大的局限性。来自日本ntt网络创新实验室的takeruinoue、hiroshiasakura和hiroshisato等人设计了一种快速开发web应用程序的高度复用数据库组件——wapdb,该组件基于restfulwebapis开发,它使得开发人员不必重新构造webapi即可快速开发web应用,从而提供rest架构风格的服务。另外,wapdb还提供了web应用程序的通用功能,例如高效的访问控制,扩展机制,搜索和统计能力。但该组件仅仅针对数据库的crud等操作进行封装,并未对web服务的整体开发过程进行建模。



技术实现要素:

为了克服现在的rest开发框架仍需在服务器端进行大量编程、开发难度较大的不足,本发明提供了一种面向rest架构风格的服务快速开发方法。采用了一种rest-ango模型来达到服务器端rest开发轻量级编程,甚至零编程的目的。rest-ango模型基于多agent技术,采用r-wrdl语言来描述用户需求,通过mappingtree来实现rest资源的映射,并进行系统实现。该方法能在较大程度上提高rest服务的开发效率,降低开发难度,并保障客户端独立性,客户端只需按照rest架构风格来发送服务请求即可。

本发明所采用的技术方案是:

一种面向rest架构风格的web服务快速开发方法,包括以下步骤:

第一步、建立一个基于rest-ango的模型,分为视图层、控制层和组件层,过程如下:

1.1、视图层(viewlayer):负责数据模型的相互转化,在任务请求阶段,视图层将用户提交的可视化数据转化为符合rest-ango模型标准的json数据媒介,并传送给控制层;在请求响应阶段,视图层将控制层处理的数据结果转化为可视化数据模型,以便用户进行直观理解;

1.2、控制层(controllerlayer):负责请求的适配、r-wrdl配置信息的解析、元agent的动态装配、任务的执行以及与表现层的通讯,并能根据表现层触发的事件执行相应的动作;

1.3、组件层(componentlayer):负责为调度agent提供一系列具有基本功能的处理单元;

第二步、基于所述的模型,提出的面向rest架构风格的web服务快速开发方法,过程如下:

步骤2.1:采用元agent自更新机制将拥有基本功能的元agent注册到agentcluster中,或者将已经废弃的元agent从agentcluster中注销,该机制的设立主要是为了使得元agent注册与注销变得及时、有序,进而使得r-wrdlpool时刻保持最新;

步骤2.2:采用惰性加载机制加载r-wrdlpool配置信息,即在程序启动阶段将r-wrdlpool中的所有配置信息装载到mappingtree和memorypool中,来提高配置信息的搜索速度,之后仅在r-wrdlpool状态发生变化时,才将改变的信息同步到内存中,以缩短配置加载时间;

步骤2.3:当mappingtree加载完成后,将r-wrdlpool配置文件中的需求信息装载到memorypool中;

步骤2.4:前端发送rest服务请求,适配agent获取该服务请求并解析得到统一资源标识符uri和http标准方法,根据解析后的结果前往mappingtree中搜索得到锚点tag和唯一操作标识key,并传递给决策agent。决策agent接受适配agent传递的锚点tag和唯一操作标识key,锚点tag为首个需要执行的元agent的标记(互联网环境是动态不确定的,这使得rest服务开发也具有了一定的不确定性。为了确保ango模型能提供相对明确和稳定的系统级别可复用rest服务开发能力,单一的元agent无法完成多个相互交互的复杂任务。因此,就需要多个元agent间通过协同的方式来实现对用户需求的解析、处理和资源提供。ango模型通过agentchain来完成这一协作任务,这既提高了软件开发的效率,同时也确保了软件质量,因为agentchain中的每一个元agent在加入前都必须保证是可用、可靠的,并已经通过软件测试。agentchain基于元agent,能够根据环境和需求的变化而变化,它也是确保ango系统内各个组件的生存能力的重要方式。此处的锚点tag标记了agentchain中的首个元agent)。决策agent首先根据锚点tag进行路由转发,然后根据唯一操作标识key获取memorypool中的配置信息config,再根据配置信息config从组件层中筛选出符合特定要求的元agent进行装配,最后决策agent按序执行装配完成的agentchain,并将执行结果以json为媒介返回至视图层。

进一步,所述1.2中,所述控制层包含的模块有:

适配agent:根据前端发送的统一资源标识符uri和http标准方法,通过搜索mappingtree得到锚点tag和唯一操作标识key,并传递给决策agent;

决策agent:任务处理的枢纽。它接受适配agent传递的锚点tag和唯一操作标识key,锚点tag为首个需要执行的元agent的标记,决策agent首先根据锚点tag进行路由转发,然后根据唯一操作标识key获取memorypool(内存池)中的配置信息config,再根据配置信息config从组件层中筛选出符合特定要求的元agent进行按序装配,并将处理结果返回至视图层;

r-wrdlpool:配置文件池,由r-wrdl(rest-webrequirementdescriptionlanguage)语言编写。r-wrdl并非是一种真正的语言,其含义是一种基于rest-ango模型的用户需求转换规则,程序员把每个功能点的个性化需求、资源所对应的uri路径、http标准方法以及每个元agent所具有的功能一一对应,通过r-wrdl语言描述在xml文档上,在程序动态执行时,语义理解agent进行解释并内存化,分别存储到mappingtree和memorypool中,以作为整个模型动态运行的全局决策依据;

mappingtree:资源操作匹配树,该树共分为4层,第一层为root,第二层对应前端发送的统一资源标识符uri,第三层对应前端发送的http标准方法,第四层由锚点tag和唯一操作标识key组成,锚点tag对应r-wrdl所用xml载体的文件名,key对应r-wrdl需求片段的唯一标识,通过搜索该树可以根据uri和http方法快速定位锚点tag以及唯一操作标识key;

memorypool(内存池):存储r-wrdlpool语义理解后的信息,在内存中由特定数据结构存储;

语义理解agent:对r-wrdl语言编写的xml文档进行语义理解,并将解释的结果存储到mappingtree和memorypool中;

agentchain:由一系列元agent按顺序组成,具有完成特定功能的agent链;

再进一步,所述1.3中,组件层包含的模块有:

agentcluster:由大量元agent组成的无序agent簇;

agentcenter:agent中心,对agentcluster进行实时感知,负责管理元agent的注册及注销;

元agent:能通过对外提供服务以展示其功能的自主行为实体单元,新的元agent可向agentcenter进行注册,从而获得参与决策agent动态装配的资格;

元agent将用户需求分类成若干功能集合,每个集合内都对应了一种通用的功能需求操作,并由对应元agent管理。即元表示元agent到某种功能集合的映射。

更进一步,所述2.1)中,采用元agent自更新机制的过程如下:

元agent首先被开发者注册到agentcluster中,之后,agentcluster会向agentcenter登记该元agent的信息,agentcenter确认元agent基本功能信息无误后,将该元agent及其功能语义更新到r-wrdlpool中;另一种情形,过期的元agent被开发者从agentcluster中废弃,之后,agentcluster会向agentcenter注销该元agent的信息,然后agentcenter将该元agent及其功能语义从r-wrdlpool中移除。

所述步骤2.2)中,r-wrdlpool配置信息的加载分为两步:首先,对r-wrdl节点信息进行匹配,组成树形结构后存入mappingtree中,采用树形结构能够更加快速地进行搜索定位。过程如下:

r-wrdl的每个element节点分别表示一个用户需求,每个element节点都拥有uri、method和key三个属性。uri表示rest服务请求资源的路径,method表示rest服务请求的动作,为http标准方法,一般为get/post/put/patch/delete。key的值无需手动配置,在语义理解agent提取uri和method的值后,会根据提取的值生成一个唯一的字符串,即操作标识key。首先语义理解agent取出uri的值放入mappingtree的第二层节点中,然后取得method的值放入mappingtree的第三层节点中,接着将当前r-wrdl所用xml载体的文件名作为锚点tag,加上自动生成的唯一操作标识key作为mappingtree的第四层叶子节点。

所述步骤2.3中,当mappingtree加载完成后,将r-wrdlpool配置文件中的需求信息装载到memorypool中,过程是:

在程序启动阶段,语义理解agent会解释r-wrdlpool中的需求配置信息,并将解释的结果存储到memorypool中;另一种情形,当程序监测到r-wrdlpool发生变化时,会命令语义理解agent对变化的内容进行语义分析,并将最新的配置信息同步到memorypool中

所述步骤2.4的过程如下:

首先将rest-ango模型抽象为4层超网络图结构,至上而下分别为:用户网络、rest服务网络、元agent网络和r-wrdl需求网络。

用户网络:由请求rest服务的用户构成,不同用户可能发送不同rest服务请求,也可能发送相同rest服务请求。

rest服务网络:由系统提供的rest服务构成,每个rest服务主要包含统一资源标识符uri、http标准方法和请求参数。每个用户可以请求多个rest服务,每个rest服务也可以为多个用户提供服务。因此,用户网络与rest服务网络之间为多对多的关系。

元agent网络:由元agent构成,rest-ango模型支持复杂rest服务的开发。由于单一的元agent无法完成多个相互交互的复杂任务,因此,就需要多个元agent间通过协同组合的方式来实现对于开发复杂rest服务的支持。rest-ango模型通过agentchain来完成元agent的组合,agentchain基于元agent,能够根据环境和需求的变化而变化,它是确保ango系统内各个组件的生存能力的重要方式。因此,rest服务与agentchain形成多对一的关系,而agentchain由多个元agent组合而成,则rest服务网络与元agent网络之间为多对多的关系。

r-wrdl需求网络:由r-wrdl需求片段构成,元agent的执行依赖r-wrdl需求配置片段,元agent可在运行时动态装载r-wrdl需求配置片段,它是元agent个性化执行以适应多样化rest服务的重要保障。每个元agent可装载多个r-wrdl配置,因此,元agent网络与r-wrdl需求网络之间为一对多的关系。

根据以上超网络之间的关系,可建立多层映射关系:rest服务与元agent之间的映射以及元agent与r-wrdl需求之间的映射。

rest-ango模型建立映射过程为:用户发送rest服务请求,适配agent获取该服务请求并解析得到统一资源标识符uri和http标准方法,根据解析后的结果前往mappingtree中搜索得到锚点tag和唯一操作标识key,并传递给决策agent,过程如下:

2.4.1)决策agent依据锚点tag得到agentchain的链首agent,并根据用户需求,结合环境变化的因素,以元agent协同的方式进行agent组合,得到agentchain。一条组合完成的agentchain可提供多个rest服务,该过程即完成了rest服务到元agent的映射。

2.4.2)决策agent根据唯一操作标识key,前往memorypool中查询得到r-wrdl需求片段(配置信息config)。一条组合完成的agentchain装载不同的r-wrdl需求片段,即可完成用户多样化的需求,此过程即完成了元agent到r-wrdl需求的映射。

本发明的有益效果是:(1)通用性服务需求一般都可通过r-wrdl语言以配置的方式进行发布,由rest-ango模型自动演化执行,提高了软件生产效率。(2)用户请求全部交由决策agent自动组装元agent完成,极大减少服务器端人工编码,提高了软件开发的质量,从而保证服务器端的稳定。(3)采用mappingtree树形结构预先提取出r-wrdl中rest服务与r-wrdl需求片断之间的对应关系,优化搜索过程,确保路由agent能快速、精确地进行定位(4)采用惰性加载机制将r-wrdlpool以及mappingtree存入memorypool中,缩短系统配置时间,加快搜索速度,减少服务器响应时间,提升了用户满意度。(5)基于rest-ango模型的开发方法遵循“二八法则”,即80%的rest服务为常见功能,可快速配置实现,提高面向rest服务批量化生产能力。

附图说明

图1示出了模型框架图。

图2示出了r-wrdl文档的xmlscheme结构。

图3示出了mappingtree结构图。

图4示出了超网络结构图。

具体实施方式

下面结合附图对本发明作进一步描述。

参照图1~图4,一种面向rest架构风格的web服务快速开发方法,包括以下步骤:

第一步、建立一个基于rest-ango的模型,模型按照分层架构思想设计,如图1所示,分为view(视图层)、control(控制层)和component(组件层),过程如下:

1.1、视图层(viewlayer):负责数据模型的相互转化,在任务请求阶段,视图层将用户提交的可视化数据转化为符合rest-ango模型标准的json数据媒介,并传送给控制层;在请求响应阶段,视图层将控制层处理的数据结果转化为可视化数据模型,以便用户进行直观理解。

1.2、控制层(controllerlayer):负责请求的适配、r-wrdl配置信息的解析、元agent的动态装配、任务的执行以及与表现层的通讯,并能根据表现层触发的事件执行相应的动作;

控制层包含的模块有:

适配agent:根据前端发送的统一资源标识符uri和http标准方法,通过搜索mappingtree得到锚点tag和唯一操作标识key,并传递给决策agent。

决策agent:任务处理的枢纽。它接受适配agent传递的锚点tag和唯一操作标识key,锚点tag为首个需要执行的元agent的标记,决策agent首先根据锚点tag进行路由转发,然后根据唯一操作标识key获取memorypool(内存池)中的配置信息config,再根据配置信息config从组件层中筛选出符合特定要求的元agent进行按序装配,并将处理结果返回至视图层。

r-wrdlpool:配置文件池,由r-wrdl(webrequirementdescriptionlanguage)语言编写。r-wrdl并非是一种真正的语言,其含义是一种基于rest-ango模型的用户需求转换规则,程序员把每个功能点的个性化需求、资源所对应的uri路径、http标准方法以及每个元agent所具有的功能一一对应,通过r-wrdl语言描述在xml文档上,在程序动态执行时,语义理解agent进行解释并内存化,分别存储到mappingtree和memorypool中,以作为整个模型动态运行的全局决策依据。

mappingtree:资源操作匹配树,该树共分为4层,第一层为root,第二层对应前端发送的统一资源标识符uri,第三层对应前端发送的http标准方法,第四层由锚点tag和唯一操作标识key组成,锚点tag对应r-wrdl所用xml载体的文件名,key对应r-wrdl需求片段的唯一标识。通过搜索该树可以根据uri和http方法快速定位锚点tag以及唯一操作标识key。

memorypool(内存池):存储r-wrdlpool语义理解后的信息,在内存中由特定数据结构存储。

语义理解agent:对r-wrdl语言编写的xml文档进行语义理解,并将解释的结果存储到mappingtree和memorypool中。

agentchain:由一系列元agent按顺序组成,具有完成特定功能的agent链。

1.3、组件层(componentlayer):负责为调度agent提供一系列具有基本功能的处理单元;

组件层包含的模块有:

agentcluster:由大量元agent组成的无序agent簇。

agentcenter:agent中心,对agentcluster进行实时感知,负责管理元agent的注册及注销。

元agent:能通过对外提供服务以展示其功能的自主行为实体单元,新的元agent可向agentcenter进行注册,从而获得参与决策agent动态装配的资格。

元agent将用户需求分类成若干功能集合,每个集合内都对应了一种通用的功能需求操作,并由对应元agent管理。即元表示元agent到某种功能集合的映射。

第二步、基于所述的模型,提出的面向rest架构风格的web服务快速开发方法的过程如下:

步骤2.1:采用元agent自更新机制将拥有基本功能的元agent注册到agentcluster中,或者将已经废弃的元agent从agentcluster中注销。该机制的设立主要是为了使得元agent注册与注销变得及时、有序,进而使得r-wrdlpool时刻保持最新。过程如下:

元agent首先被开发者注册到agentcluster中,之后,agentcluster会向agentcenter登记该元agent的信息,agentcenter确认元agent基本功能信息无误后,将该元agent及其功能语义更新到r-wrdlpool中;另一种情形,过期的元agent被开发者从agentcluster中废弃,之后,agentcluster会向agentcenter注销该元agent的信息,然后agentcenter将该元agent及其功能语义从r-wrdlpool中移除。

步骤2.2:采用惰性加载机制加载r-wrdlpool配置信息。即在程序启动阶段将r-wrdlpool中的所有配置信息装载到mappingtree和memorypool中,来提高配置信息的搜索速度,之后仅在r-wrdlpool状态发生变化时,才将改变的信息同步到内存中,以缩短配置加载时间。如上所述,r-wrdlpool配置信息的加载分为两步:首先,对r-wrdl节点信息进行匹配,组成树形结构后存入mappingtree中,采用树形结构能够更加快速地进行搜索定位。

r-wrdl文档的xmlscheme结构如图2所示:每个element节点分别表示一个用户需求,每个element节点都拥有uri、method和key三个属性。uri表示rest服务请求资源的路径,method表示rest服务请求的动作,为http标准方法,一般为get/post/put/patch/delete。key的值无需手动配置,在语义理解agent提取uri和method的值后,会根据提取的值生成一个唯一的字符串,即操作标识key。r-wrdl文档的其余部分将在步骤3中被加载至memorypool中。

加载mappingtree的过程如下:首先语义理解agent取出uri的值放入mappingtree的第二层节点中,然后取得method的值放入mappingtree的第三层节点中,接着将当前r-wrdl所用xml载体的文件名作为锚点tag,加上自动生成的唯一操作标识key作为mappingtree的第四层叶子节点,加载完毕的mappingtree结构如图3所示。

步骤2.3:当mappingtree加载完成后,将r-wrdlpool配置文件中的需求信息装载到memorypool中,具体过程是:

在程序启动阶段,语义理解agent会解释r-wrdlpool中的需求配置信息,并将解释的结果存储到memorypool中;另一种情形,当程序监测到r-wrdlpool发生变化时,会命令语义理解agent对变化的内容进行语义分析,并将最新的配置信息同步到memorypool中。

步骤2.4:前端发送rest服务请求,适配agent获取该服务请求并解析得到统一资源标识符uri和http标准方法,根据解析后的结果前往mappingtree中搜索得到锚点tag和唯一操作标识key,并传递给决策agent。决策agent接受适配agent传递的锚点tag和唯一操作标识key,锚点tag为首个需要执行的元agent的标记(互联网环境是动态不确定的,这使得rest服务开发也具有了一定的不确定性。为了确保ango模型能提供相对明确和稳定的系统级别可复用rest服务开发能力,单一的元agent无法完成多个相互交互的复杂任务。因此,就需要多个元agent间通过协同的方式来实现对用户需求的解析、处理和资源提供。ango模型通过agentchain来完成这一协作任务,这既提高了软件开发的效率,同时也确保了软件质量,因为agentchain中的每一个元agent在加入前都必须保证是可用、可靠的,并已经通过软件测试。agentchain基于元agent,能够根据环境和需求的变化而变化,它也是确保ango系统内各个组件的生存能力的重要方式。此处的锚点tag标记了agentchain中的首个元agent)。决策agent首先根据锚点tag进行路由转发,然后根据唯一操作标识key获取memorypool中的配置信息config,再根据配置信息config从组件层中筛选出符合特定要求的元agent进行装配,最后决策agent按序执行装配完成的agentchain,并将执行结果以json为媒介返回至视图层。

具体过程如下:

首先将rest-ango模型抽象为如图4所示的四层超网络图结构,至上而下分别为:用户网络、rest服务网络、元agent网络和r-wrdl需求网络。

用户网络:由请求rest服务的用户构成,不同用户可能发送不同rest服务请求,也可能发送相同rest服务请求。

rest服务网络:由系统提供的rest服务构成,每个rest服务主要包含统一资源标识符uri、http标准方法和请求参数。每个用户可以请求多个rest服务,每个rest服务也可以为多个用户提供服务。因此,用户网络与rest服务网络之间为多对多的关系。

元agent网络:由元agent构成,rest-ango模型支持复杂rest服务的开发。由于单一的元agent无法完成多个相互交互的复杂任务,因此,就需要多个元agent间通过协同组合的方式来实现对于开发复杂rest服务的支持。rest-ango模型通过agentchain来完成元agent的组合,agentchain基于元agent,能够根据环境和需求的变化而变化,它是确保ango系统内各个组件的生存能力的重要方式。因此,rest服务与agentchain形成多对一的关系,而agentchain由多个元agent组合而成,则rest服务网络与元agent网络之间为多对多的关系。

r-wrdl需求网络:由r-wrdl需求片段构成,元agent的执行依赖r-wrdl需求配置片段,元agent可在运行时动态装载r-wrdl需求配置片段,它是元agent个性化执行以适应多样化rest服务的重要保障。每个元agent可装载多个r-wrdl配置,因此,元agent网络与r-wrdl需求网络之间为一对多的关系。

根据以上超网络之间的关系,可建立多层映射关系:rest服务与元agent之间的映射以及元agent与r-wrdl需求之间的映射。rest-ango模型建立映射过程如下:

用户发送rest服务请求,适配agent获取该服务请求并解析得到统一资源标识符uri和http标准方法,根据解析后的结果前往mappingtree中搜索得到锚点tag和唯一操作标识key,并传递给决策agent。

2.4.1)决策agent依据锚点tag得到agentchain的链首agent,并根据用户需求,结合环境变化的因素,以元agent协同的方式进行agent组合,得到agentchain。一条组合完成的agentchain可提供多个rest服务,该过程即完成了rest服务到元agent的映射。

2.4.2)决策agent根据唯一操作标识key,前往memorypool中查询得到r-wrdl需求片段(配置信息config)。一条组合完成的agentchain装载不同的r-wrdl需求片段,即可完成用户多样化的需求,此过程即完成了元agent到r-wrdl需求的映射。

实例:采用本发明提出的面向rest架构风格的web服务快速开发方法,为某教师培训管理系统开发rest服务为例。该rest-ango模型共分为4个模块:适配模块、配置模块、决策模块和元agent模块。说明如下:

适配模块:对前端发送的rest服务请求进行解析,将解析得到的统一资源标识符uri和http标准方法发送至配置模块,查询得到锚点tag和唯一操作标识key,并发送至决策模块。

配置模块:在内存中共分配两块配置池,mappingtree存储了统一资源标识符uri、http标准方法和r-wrdl需求配置的对应关系,利用mappingtree能够根据前端发送的rset服务快速定位到r-wrdl需求配置;memorypool存储了r-wrdl需求配置,决策模块根据该配置信息能够进行agent组合并完成用户需求。

决策模块:根据适配模块发送的锚点tag和唯一操作标识key,前往配置模块查询得到r-wrdl需求配置,根据获取到的配置信息,从元agent模块中筛选相应的元agent进行组合,并完成用户需求。

元agent模块:由执行基本功能的自主行为实体单元——元agent构成,模块能够对元agent的登记、注销进行有效管理,并实时将元agent信息更新至配置模块。该模块主要为决策模块提供有效的元agent进行组合。

下面以基本的培训发布功能为例,详细阐述rest-ango模型的运作流程:

1)配置r-wrdlpool,以xml为载体的r-wrdl配置信息如下:

r-wrdl元素说明如表1所示:

表1

2)配置模块对r-wrdlpool进行解析,提取element节点的uri以及method属性,将uri属性的值作为mappingtree的第二层节点,将method属性的值作为mappingtree的第三层节点。接着,程序会根据uri以及method的值自动生成唯一的字符串post/training,配置模块将该字符串回填至r-wrdl的element节点的key属性中,并将该值作为唯一操作标识key,加上当前r-wrdl所用xml载体的文件名insert作为锚点tag,放入mappingtree的第四层叶子节点中。此时,mappingtree的结构已经构建完成。然后配置模块会将余下的r-wrdl需求配置存入memorypool中,完成所有配置信息的加载。

3)前端发送rest服务请求,请求服务器发布一个新培训活动,uri为/trainings,method为post,另外rest服务请求中还包含新培训活动的相关参数,例如:培训名称、时间、地点等。适配模块首先根据uri的值/trainings,匹配mappingtree的第二层子节点,找到值为/trainings的节点后,根据method的值post,匹配/trainings节点下的第三层子节点,找到值为post的节点后,取出post节点下第四层子节点的值,该值的结构为tag+key。此时适配模块完成查询功能,获得锚点tag:insert以及唯一操作标识key:post/training。

4)决策模块根据唯一操作标识key:post/training,前往memorypool中查询key属性为post/training的element节点,查询得到的element节点即为r-wrdl需求配置,决策模块首先根据锚点tag:insert定位得到agentchain的链首agent,然后依据r-wrdl需求配置进行元agent组合。由于本例需求较为简单,单个元agent即可完成新培训的发布,因此无需进行元agent组合。链首agent:insert根据查询得到的r-wrdl需求配置执行以下步骤:

4.1)查找element节点下的sql子节点,获得value属性值:insertintotrainingvalues(null,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,null)

4.2)遍历sql节点下的param子节点,根据param的值解析rest服务请求中传递的同名参数,将得到的参数值填入上一步value值相应的?处,直到value值中所有的?被前端传递的参数所替换。

4.3)此时替换完毕后的value值即为需要执行的sql语句,元agent执行该sql语句,将执行结果以json为数据媒介返回至前端。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1