原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://zhangjunhd.blog.51cto.com/113473/47283
本文主要介绍Rest风格的Web Services。
author: ZJ 2007-10-23
Blog:
[url]http://zhangjunhd.blog.51cto.com/[/url]
1.什么是REST?
REST 是由 Roy Fielding 在他的论文《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。
REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”(参考:《SIP/IMS网络中的Representational State Transfer (REST)和数据分布》)。
可以将REST归纳如下:
1.1首先REST只是一种风格,不是一种标准
POST/Order HTTP/1.1
Host:[url]www.northwindtraders.com[/url]
Content-Type:text/xml
Content-Length:nnnn
<UpdatePO>
<orderID>098</orderID>
<customerNumber>999</customerNumber>
<item>89</item>
<quantity>3000</quantity>
</UpdatePO>
|
<td 230,="" 230)="" none="" repeat="" scroll="" 0%="" 50%;="" -moz-background-clip:="" -moz-initial;="" -moz-background-origin:="" -moz-background-inline-policy:="" width:="" 426.1pt;"="" valign="top" width="568" style="padding: 0cm 5.4pt; margin: 0px; border: 1pt solid windowtext;">
POST/Order HTTP/1.1
Host:[url]www.northwindtraders.com[/url]
Content-Type:text/xml
Content-Length:nnnn
SOAPAction:”urn:northwindtraders.com:PO#UpdatePO”
<SOAP-ENV:Envelope
xmlns:xsi=”[url]http://www.3w.org/1999/XMLSchema/instance[/url]”
xmlns:SOAP-ENV=”[url]http://schemas.xmlsoap.org/soap/envelope[/url]”
xsi:schemaLocation=”[url]http://www.northwindtraders.com/schema/NPOSchema.xsd[/url]”>
<SOAP-ENV:Body xsi:type=”NorthwindBody”>
<UpdatePO>
<orderID>098</orderID>
<customerNumber>999</customerNumber>
<item>89</item>
<quantity>3000</quantity>
</UpdatePO>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2.4 安全机制
REST使用了简单有效的安全模型。REST中很容易隐藏某个资源,只需不发布它的U RI;而在资源上也很容易使用一些安全策略,比如可以在每个 URI 针对 4个通用接口设置权限;再者,以资源为中心的 Web服务是防火墙友好的,因为 GET的意思就是GET, P UT 的意思就是PUT,管理员可以通过堵塞非GET请求把资源设置为只读的,而现在的基于RPC 模型的 SOAP一律工作在 HTTP 的 POST上。
使用 SOAP RPC模型,要访问的对象名称藏在方法的参数中,因此需要创建新的安全模型。
2.5 无法用于事务型的服务
对于事务型的服务,一个简单的例子就是银行事务,在那里用户可以把钱从一个账户转移到另一个账户上。用户不想直接操作资源(钱、银行账户等等),他们只想告诉银行他们想要达到的目的,并且让银行根据他们的利益对资源进行处理。
所以从这一条,我们应该明白,选择基于REST或SOAP RPC风格的Web 服务,我们应该首先考虑这个服务是针对资源的还是针对活动的。
- James Snell,面向资源与面向活动的 Web 服务,英文原文。
3.JAX-WS
是Java Architecture for XML Web Services的缩写,简单说就是一种用Java和XML开发Web Services应用程序的框架, 目前版本是2.0, 它是JAX-RPC 1.1的后续版本。
JAX-WS2.0
用JAXB2来处理Java Object与XML之间的映射。
JAX-WS通过javax.xml.ws.Provider接口来构建REST风格的终端。
4.WADL
Web Application Description Language (WADL)
是由SUN公司提出的,旨在提供一种Web 应用的描述语言。WADL主要描述一个Web 应用的
- 所有应用于每个资源的特定方法-应用于每个资源的HTTP方法,指定的输入和输出以及它们支持的数据格式
- 资源表现的形式-支持的MIME类型和所用到的XML schemas
下面是一个WADL示例,它描述了Yahoo新闻搜索的应用。
- Lines 2 开始一个应用描述,定义所使用的namespaces。
- Lines 3–6 定义XML 语法,这个示例中是两个W3C XML Schema。
- Lines 7–11描述了Yahoo新闻搜索Web 资源以及它所支持的HTTP方法。
- Lines 12–26 描述了‘search’ GET方法。
5.关于WADL的项目介绍
GlassFish » Web Application Description Language
wadl2java
A tool that generates client side stubs from WADL files. May be used from the command line or as an Apache Ant plug-in, see the wadl2java documentation for full details.
wadl2java_yahoo
A sample project that uses the wadl2java tool to create stubs for the Yahoo News Search Service. Includes a simple main method that uses the generated stubs to query for the latest Java news.
6.建议阅读的资料
[1]Roy Thomas Fielding,Architectural Styles and the Design of Network-based Software Architectures
[2] RESTwiki
[3]
Rest Architectural Style
[4]
REST mailing list
[5]
Building Web Services the REST Way
[6] 面向资源与面向活动的 Web 服务
[7]
Some thoughts about SOAP versus REST on Security
[8]WADL语言作者Marc Hadley's Blog
[9]
Java Web Service Technologies @Sun
本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/47283