。本文采用wADL(web Application De.
scription Language)描述资源,WADL由SLJN公司
提出,它是一种用于表达“H,兀、P行为”的XML词
汇,它描述了服务所暴露的所有资源以及在这些资
源上执行的操作【3’4J。可以向客户端提供一个描
述服务所暴露的资源的wADL文件,也可以在某
个特定资源的表示里嵌入一段WADL,以告诉客
户端如何处理该资源。一个WADL文档主要包括
4个部分:(1)资源列表,用于描述应用中所有的资
源;(2)资源之间的关系,用于说明资源之间的链接
关系;(3)所有应用于每个资源的特定的方法;(4)
资源的表示。wADL文档还告诉客户端在发送请
求时附加某些Hr曙报头,以及请求失败时返回
哪种状态码。
基于REST的Web服务研究
汪芳琴,谢强,丁秋林
(南京航空航天大学信息科学与技术学院,江苏南京210016)
摘要:针对基于ⅪⅥL—RPC交互模型的Web服务产生的紧密耦合、接口复杂问题,提出了一种
基于REST的Web服务,给出了各个部分的设计方法,包括基于RE汀的面向资源Web服务的
设计、请求一响应交互模型的设计及基于语义搜索的服务发现框架的设计,并将研究成果应用到
项目中,结果表明,该web服务具有耦合度低、接口统一、可移植性好、可靠性高及具有良好web
级规模可伸缩性的特点。
关键词:表述性状态转移;web服务;语义服务搜索;面向资源的架构
中图分类号:TP393.04 文献标识码:A 文章编号:1672一1616(2009)23一0044—04
当前用于构建web服务的协议和标准有许多,如黜、wS—Security等.,它们都构筑在
H,n、P的基础之上,却很少使用H,r]甲的任何特
性,H,兀、P仅仅成了一种传输庞大ⅪvIL负载的协
议,它们都忽视了web作为分布式编程平台的潜
力。这类传统的)(ML—I心C风格的web服务不
具有可寻址性、可缓存性和连通性等特性,也不遵
循统一接口。I迮ST(REpresentational State Trans.
fer)是对当前web体系结构潜在设计原则的一种
描述,也是对Web最成功要素的总结【2t3 J。当前国
内外对基于REST的web服务的研究仍处于理论
探索阶段,实际应用也停留在小的封闭系统和
砌!ST—RPC混合式应用层面,无法达到web级规
模【4,5I。基于以上诸多不足,本文拟采用基于
I冱ST的面向资源的架构(ReSource—Oriented p虹一
chitecture,ROA)替代XML—I心C风格的架构来
设计web服务,并针对web服务请求响应交互模
型提出一种语义搜索方法来发现服务。
1 基于REST的面向资源架构
RE盯是一种用于设计分布式超媒体系统的
基于网络的架构风格,它强调组件交互的可伸缩
性、接口的通用性、组件的独立部署怛J。RE盯系
统中的组件必须遵守下列约束:首先,网络上所有
有价值的、有被引用必要的事物都被抽象为资源,
并且每个资源对应惟一的资源标识;其次,只能通
过通用的连接器接口对资源进行操作,这些对资源
的操作不会改变资源的标识符,且所有操作都是无
状态的。根据如上约束,本文提出了一种基于
REsr的架构,即面向资源的架构,它是一种把实
际问题转换成基于REST的web服务的方法。按
照I也趼架构风格的要求,面向资源的架构应具有
可寻址性、无状态性、连通性和统一接口等4个主
要特性。根据这些特性,可以将其划分为5个主要
功能成份:资源、资源的名称、资源的表示、资源间
的链接及资源的描述。
1.1 资源的设计
使用面向对象的方法来设计资源,并且每个资
源对外只暴露一个统一接口,最多支持6种HTTP
方法,允许执行创建、修改、读取和删除等4种基本
操作。在进行资源设计时,先规划一个数据集,该
数据集是服务将要暴露的或者要让用户去构建的,
然后把其中部分数据作为HrrP资源来发布。这
些资源分为3类:(1)预定义的一次性资源。它们
具有一个作为其他资源人口的URI,客户端可以
获取它的某种表示,但不能删除或更改此类资源。
(2)对应于各数据项的资源。根据客户端的权限可
对这类资源进行创建、修改、读取或删除操作。(3)
代表数据集上执行算法结果的资源。这类资源不
是事先明确定义好的,而是符合某种查询条件的资
源集合。
在进行资源设计时如何划分或确定资源粒度
尤为重要。为此,本文根据对象的不同分别确定资
源的粒度,从而确定相应资源的操作类型。比如一
收稿日期:2009一09一14
作者简介:汪芳琴(1984~),女,安徽安庆人,南京航空航天大学硕士研究生,主要研究领域为信息系统集成、Web服务及语义Web技术。
万方数据
·信息技术应用· 汪芳琴谢强丁秋林基于REST的web服务研究45
次对多个资源进行操作或者批量创建资源,则可以
暴露一个可被创建、更新和删除的“工厂”资源;或
者应用涉及到比较复杂的事务,也可把事务本身暴
露为一个可被创建、更新和删除的资源。
1.2资源的名称及资源的表示
资源的名称也是资源的URI,URI遵循如下3
条规则:(1)用路径变量来表达层次结构,形如
“/parent/child”;(2)用逗号或者分号来表达非层次
结构,形如“/parent/childl;child2”;(3)用查询变量
表达算法的输入,如“http://、稿m,.goOgle.cn/
search?q=RE趼&start=30”。确定了要暴露的
资源并为之设计了URI后,当客户端通过URI请
求某个资源时,服务端返回的数据类型及格式取决
于资源表示的设计∞J。一个资源表示至少满足2
个条件:首先,要能传达资源的当前状态;其次,要
能连接到可能的下个应用状态或资源状态,以起到
推进状态的作用。本文采用微格式Ⅺ{TML作为
表示的基本格式,微格式XHTML是Ⅺ{TML的
扩展,它给标签增添特定领域的语义,可被专用微
格式处理器、HTML处理器及ⅪⅥL处理器理解和
解析。对于微格式XHTML不善于表示的资源,
可以采用如下的表示格式:(1)要用标签来表达相
关语义,可以采用改进的Atom标签,比如hAtom;
(2)要表示搜索结果列表,可以采用OI)enSearch;
(3)要表示图形图像,一般采用SVG表示格式,它
是一套程序可以理解并能处理图形的XML词汇;
(4)客户端向服务器提交表示或服务器向客户端返
回表示时,一般采用表单编码的关键字一值对格
式,因为客户端通常具备解码表单编码格式的能
力;(5)对于一些比较复杂的数据结构,一般采用
JSON格式来表示。以上列出的表示格式都能被
大多数客户端理解,并且基本能够满足应用需求。
如果在某些情况下,客户端有特定的需求.则可以
优先采用客户端指定的表示格式或采用自定义的
表示格式。
1.3资源间的链接及资源的描述文件
在基于REST的服务里,表示的主要用途是传
达资源状态,不仅包含数据,还包含指向其他资源
的链接。服务器通过表示告诉客户端当前状态有
哪些后续状态可以进入,链接起到的就是推进状态
的作用,客户端应用状态在服务器提供的表示的指
引下发生变化,这种资源间链接的特性被称为“连
通性”。图1所示为Pragrammable Web上3种服
务连通性的比较图。
口
(a)RPC风格的服务(b)REST.RPC风格的服务(c)REsT风格的服务
图1同一种服务的3种实现方式
图1中3个服务的功能是相同的,但它们的易
用性从左到右依次增强。I冲C风格的服务通过单
个URI来暴露所有服务,它既不是可寻址的,也不
是连通的;REsr—RPC风格的服务是可寻址的, 但不是连通的;脚风格的服务既可寻址,也是
连通的。本文采用wADL(web Application De.
scription Language)描述资源,WADL由SLJN公司
提出,它是一种用于表达“H,兀、P行为”的XML词
汇,它描述了服务所暴露的所有资源以及在这些资
源上执行的操作【3’4J。可以向客户端提供一个描
述服务所暴露的资源的wADL文件,也可以在某
个特定资源的表示里嵌入一段WADL,以告诉客
户端如何处理该资源。一个WADL文档主要包括
4个部分:(1)资源列表,用于描述应用中所有的资
源;(2)资源之间的关系,用于说明资源之间的链接
关系;(3)所有应用于每个资源的特定的方法;(4)
资源的表示。wADL文档还告诉客户端在发送请
求时附加某些Hr曙报头,以及请求失败时返回
哪种状态码。
2 客户端请求与服务端的响应
H,n、P请求/口向应一般经历以下步骤:首先,准
备好要放人H1vrP请求里的数据,利用H,兀、P库
把这些数据变成H,n、P请求,并发给服务端。其
次,把H,丌P响应解析为一个数据结构或一系列
事件。按照H,n、P请求巾向应背后蕴含的模式,编
写一些封装方法,把HrrP访问的细节抽象出来。
但不同的封装库差别比较大,所以需要某种方式把
各个服务间的差异抽象出来,用于描述各种不同语
言编写的web服务,用WADL编写的文档可被通
用的web服务客户端作为脚本使用。wADL文档
描述的是响应统一接口的资源,它把H1vrP请求
的细节、表示的构建及解析都抽象掉了,使用
HTTP统一接口完成对资源的所有操作。图2是
一个基于REsr的web服务请求一响应模型,客
户端根据WADL文件向服务端发出遵循统一接口
的操作请求,服务端处理这个请求并返回相应的
}rn、P响应码、一些H,几、P报头及一个实体主体。
万方数据
46 2009年12月中国制造、世信息化第38卷第23期
这个实体主体可能是资源的表示,也可能是操作失
败的消息,客户端通过响应代码来辨别返回的实体
主体的用途,以便客户端对其进行正确的处理,并
通过HrrP报头获得表示的类型、大小、认证方案
等信息。可以把wADL文档发布出来,在其他服
务里引用,并按照WADL文档的描述及通过体现
统一接口的方法来操作这些服务端资源。wADL
描述文档描述了请求及响应所需基本信息,包括对
请求参数的要求、服务端返回的表示格式等信息。
根据wADI.资源描文件的要获得服务并返回资源的表示及
求发出执行某种操作的请求相应的}rrrP撤头及响应码
图2基于RE汀的Web服务请求响应交互模型
3服务发现
为了让服务请求者快速、便捷地定位合适的服
务资源,可以使用语义服务资源搜索达到这一目
服务请求者
标。一个高效、精确的语义服务资源搜索框架是语
义服务框架中的一个必要组件,因此本文提出一种
基于SAwADL语义服务描述模型的服务资源搜
索框架。
SAWADL模型定义了QoS语义、执行语义、
功能语义和接口语义共4种服务资源语义标注信
息L6J,覆盖服务资源搜索的全过程。其中QOS语
义信息用于描述语义服务的服务质量,便于提高语
义服务自动发现和组合的质量;执行语义信息用于
描述语义服务执行时的前置操作和后置操作,便于
进行语义服务的组合和动态配置;功能语义信息用
于描述语义服务的功能,包括服务的分类、服务提
供的功能等,便于进行精确的语义服务自动发现;
接口语义信息用于描述语义服务的操作、消息,便
于进行语义服务自动发现和组合。图3为基于
SAwADL模型的服务资源发现及搜索框架,它主
要包括5个部分:资源获取模块、断言及关键字索
引库、语义索引库、SAWADL语义服务资源快照和
资源匹配模块。
u∞rImerface I用户查询l I结粜列农业小和资源快照侧览
根据WADL发出
请求芹获得服务墅厂——丽面r] 配J 涪义pL彪J
颦岁嘲鬻
务资源快
语义索引卜.1对sAwADL解析
服务提供者1 w∞L F叫sAw_ADL什发布●亡Imemet
图3服务资源搜索框架
服务提供者把要发布资源的wADL转换成和分类关键字。语义索引库、断言及关键字索引库
sAwADL格式的服务资源描述文件,资源获取模为资源匹配模块提供语义信息,支撑语义匹配的全
块负责将发布在互联网中符合SAWADL服务描过程。资源匹配模块负责将用户的查询条件按以
述规范的服务资源描述文件提取出来。提取的服上4种语义标注元素进行解析,并将解析后的查询
务描述文件经过解析后,一方面形成SAWADL语条件分别与对应的索引项进行匹配。
义服务资源快照,另一方面进行概念索引,然后用在图3中,资源匹配分成3个部分:断言匹配、
以上提到的4种语义标注元素分别建立索引表供关键字匹配和语义匹配。搜索引擎对用户的查询
资源匹配模块使用。SAwADL语义服务资源快照条件进行3种类型的匹配操作后,以语义服务资源
库保存已获取的语义服务资源描述文件,而且最终快照列表和相应wADL资源描述文件列表形式返
返回给用户的搜索结果也将从中获取。断言及关回给用户,以便用户对服务列表进行进一步的操
键字索引库保存服务资源描述文件中包含的断言作。通过语义服务资源快照;如果用户找到了符合
万方数据
·信息技术应用· 汪芳琴谢强丁秋林基于REsr的web服务研究47
要求的服务资源,则可以按照该WADL资源描述
文件的要求,直接向服务提供者发出请求以获得服
务。
4应用分析
编码管理系统按功能分成6个部分,有编码规
则定义、编码类别定义、取码等,遵循基于REsr的
web服务设计规范。设计过程大致如下,规划一
个数据集,它涵盖质量手册编码、材料信息编码、标
准件编码等各个类别的编码,并对各类信息对象的
编码结构进行分析,把信息码分成一级码和二级
码,并把它们的设计方法同各个类别的编码暴露为
资源。针对每个资源给出一个URI:http:/^硼M.
chrdi.com/{oOdeTypeN锄e}。使用微格式
x}{TML作为基本表示格式,并在其中嵌入表单供
用户提交请求。另外,针对这些服务资源编写一个
WADL文档,并将其发布供客户端获取,客户端根
据wADL文档向服务端发出请求,以生成相应的
信息编码。下面是部分客户端请求代码,其功能是
载入一个WADL应用文档并给出认证信息:
00de=WADL::Application.fr01.n—wadl(open
(∞deS.wadl));
Senrice=00de.v1.witn—baSic—auth(uSenlame,
paSSword);
下面是wADL文档(∞des.wadl)的部分代码:
<applicationⅪnlns=”http://reSearch.sun.oom/
wadl/2006/07”>
<reSourceS baSe=”httD://、^rww.chrdi.咖/,>
<resource path=”v1”>
<param n锄e=”Auth。nzation”style=”header,,re—
quired=”true,,>
</par锄>
<n:source path=”oodeS,,>
<method href=”#getRecentG甜eS,,/>
</}esource>
</iesource>
</resources>
<method id=,,getRecentC0des,,name=”(适r>
<request><par锄n啪e=”∞deType,,style=”
fom,,/>..</request>
<response>
<repreSentation href=”#00deTypeL对/>
<fault id=”ALuthorizationRequired”status=”404”/
>
</reSpOm虻>
</耵舱thod>
<representation id=”oOdeTypeList,,mediaType=”
text/xml”element=”QoW”> <par锄n锄e=”蚶path=”/codes删”re—
peating=”tme,,/>
</repreSentation>
</application> 在设计基于脚架构的编码管理系统过程
中,我们将系统中所有组件抽象成资源,并对每个
Web资源赋予一个URI,然后使用标准的发现和
引用资源的方式调用web服务,以及通过通用、简
洁的接口对这些资源进行复杂的操作。这样做不
仅简化了开发,提高了服务的性能,而且使系统具
有良好web级可伸缩性。另外,系统中所有的动
作和被访问的资源都可以从H1vrP和URI中得
到,这使得代理服务器、缓存服务器和网关能很好
地协调工作。在安全性方面,因为R琰汀使用了简
单有效的安全模型,要隐藏某个资源,只需不发布
它的URI,在资源上也能很容易地使用一些安全
策略,可以利用现有的安全模型,降低了解决安全
问题的难度。
5 结束语本文通过比较分析基于I唧的Web服务与
传统的Ⅺ以L—RPC风格的web服务,说明了基于
R琰汀交互模型在web级规模上的优势,并给出
了该web服务的设计方法。I也ST风格的web服
务逐渐被越来越多的厂商支持和应用。基于
I砸趼的Web服务是Web发展的方向,必将推进
当前Web服务技术的大规模应用和进一步发展,
使Web服务真正成为基于web的服务。
参考文献:
[1]cuberaF.unraveliflgtheweb鸵nriceweb—An岫troducti∞t0
s@蟑,w瓯)L柚d UI)DI[J].IEEE Imemet(h唧Iting,2002,
6(2):86—93.
(下转第52页)
万方数据
52 2009年12月中国制造业信息化第38卷第23期
下一步的研究中将会逐步扩充QOS的指标,在保
证服务查询时间、查询效率的基础上,提高服务选
择质量。
参考文献:
[1] Garofalakis J,Pallagis Y,Sakka阿ll∞,以nz.web senrice Dis一
∞very M∞hanisn氇:L∞b119 for a Needle in a Ha”tack[EB/
OL]. http//州nv. ht04.org/w甜岱hops/webErlgir脱血g/
H11D4WE.2007一06—30.
[2]Ma妯m Paolucci,TaIcah油Kawamura,Teny R Paylle,以“.
semantic Matching of web Senrio酋Capabilities[C].Q【fDrd:
L龃H口n珏^ks.20D2:333—347.
[3] xu Bin,zhang Po,Li J邺i,以口z.s哪肌ticⅡ1atchmaker for
rarIl【ing web ser“c签[J].Joum且l of c∞Ⅱputer science&Tech·
nobgy,2006,21(4):574—581.
[4]朱海平.基于概念图的语义搜索[D].上海:上海交通大学,
2006:31—32.
[5]代钰,杨雷,张斌,等.支持组合服务选取的QOS模型
及优化求解[J].计算机学报,2006,29(7):1 167—1 178.
[6]李曼.王大冶.杜小勇。等.基于领域本体的web服务动态
组合[J].计算机学报,2005,28(4):644—650.
[7] 张佩云,孙亚民.基于Petri网的web服务组合模型描述和验
证[J].系统仿真学报,2007,19(12):2 872—2 876.
[8] 杨胜文,史美林.一种支持Q。S约束的web服务发现模型
[J】.计算机学报,2005,28(4):589—594.