构建REST风格的Web Service

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只是一种风格,不是一种标准
 
2.3  返回一般的XML格式内容
一般情况下,一个RESTful Web Service将比一个SOAP RPC Web Service占用更少的传输带宽。
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  无法用于事务型的服务
对于事务型的服务,一个简单的例子就是银行事务,在那里用户可以把钱从一个账户转移到另一个账户上。用户不想直接操作资源(钱、银行账户等等),他们只想告诉银行他们想要达到的目的,并且让银行根据他们的利益对资源进行处理。
所以从这一条,我们应该明白,选择基于RESTSOAP RPC风格的Web 服务,我们应该首先考虑这个服务是针对资源的还是针对活动的。
- James Snell面向资源与面向活动的 Web 服务,英文原文
 
3JAX-WS
Java Architecture for XML Web Services的缩写,简单说就是一种用JavaXML开发Web Services应用程序的框架目前版本是2.0, 它是JAX-RPC 1.1的后续版本。
JAX-WS2.0 JAXB2来处理Java ObjectXML之间的映射。
JAX-WS通过javax.xml.ws.Provider接口来构建REST风格的终端。
 
4WADL
Web Application Description Language (WADL) 是由SUN公司提出的,旨在提供一种Web 应用的描述语言。WADL主要描述一个Web 应用的
  • 资源列表-站点所有的资源
  • 资源之间的关系-说明资源之间的链接关系
  • 所有应用于每个资源的特定方法-应用于每个资源的HTTP方法,指定的输入和输出以及它们支持的数据格式
  • 资源表现的形式-支持的MIME类型和所用到的XML schemas
 650) this.width=650;" οnclick="" http:="" blog.51cto.com="" viewpic.php?refimg=" + this.src)" alt="" src="http://img1.51cto.com/attachment/200710/200710231193108006978.jpg" border="0" οnabοrt="" οnblur="" οnchange="" οndblclick="" οnerrοr="" οnfοcus="" οnkeydοwn="" οnkeypress="" οnkeyup="" οnmοusedοwn="" οnmοusemοve="" οnmοuseοut="" οnmοuseοver="" οnmοuseup="" οnreset="" οnresize="" οnselect="" οnsubmit="" οnunlοad="" style="padding: 0px; margin: 0px; vertical-align: top; border: none;">
下面是一个WADL示例,它描述了Yahoo新闻搜索的应用。
  • Lines 2 开始一个应用描述,定义所使用的namespaces
  • Lines 3–6 定义XML 语法,这个示例中是两个W3C XML Schema
  • Lines 7–11描述了Yahoo新闻搜索Web 资源以及它所支持的HTTP方法。
  • Lines 12–26 描述了‘search’ GET方法
  • Lines 13–21 描述输入
  • Lines 22–25 描述所有可能的输出。
 
5.关于WADL的项目介绍
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.建议阅读的资料
[2] RESTwiki
[8]WADL语言作者Marc Hadley's Blog

本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/47283


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值