WebService
出自Manyou开发者指南
Web Service实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:远程过程调用(RPC),面向服务架构(SOA)以及表象化状态转变(REST)。
目录 |
使用Web Service的方式
远程过程调用(RPC)
Web Service提供一个分布式函数或方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义(类似于早期的XML-RPC)。
尽管最初的Web Service广泛采用RPC方式部署,但针对其过于紧密之耦合性的批评声也随之不断。这是因为RPC式Web Service实质上是利用一个简单的映射,以把用户请求直接转化成为一个特定语言编写的函数或方法。如今,多数服务提供商认定此种方式在未来将难有作为,在他们的推动下,WS-I基本协议集(WS-I Basic Profile)已不再支持远程过程调用。
面向服务架构(SOA)
现在,业界比较关注的是遵从面向服务架构(Service-oriented architecture,SOA)概念来构筑Web Service。在面向服务架构中,通讯由消息驱动,而不再是某个动作(方法调用)。这种Web Service也被称作面向消息的服务。
SOA式Web Service得到了大部分主要软件供应商以及业界专家的支持和肯定。作为与RPC方式的最大差别,SOA方式更加关注如何去连接服务而不是去特定某个实现的细节。WSDL定义了联络服务的必要内容。
具象化状态转移(REST)
表象化状态转移式(Representational state transfer,REST)Web Service类似于HTTP或其他类似协议,它们把接口限定在一组广为人知的标准动作中(比如HTTP的GET、PUT、DELETE)以供调用。此类Web Service关注与那些稳定的资源的互动,而不是消息或动作。
此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。
REST
表象化状态转变(Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
目前在三种主流的Web Service实现方案中,因为REST模式的Web Service与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的Web Service开始采用REST风格设计和实现。例如,MYOP的API即是REST风格Web Service调用的一种实现。
宗旨
REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表形。获得这些表形致使这些应用程序转变了其状态。随着不断获取资源的表形,客户端应用不断地在转变着其状态,所谓表形化的状态转变(Representational State Transfer)。
这一观点不是凭空臆造,而是通过观察当前互联网的运作方式而抽象出来的。Roy Fielding 认为,“设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变。”
要点及标准
需要注意的是,REST是一种设计风格而不是一个标准。REST通常基于使用HTTP、URI,和XML以及HTML这些现有的广泛流行的协议和标准。
- 资源是由URI来指定。
- 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
- 通过操作资源的表形来操作资源。
- 资源的表现形式则是XML或者HTML,取决于是读者是机器还是人、使用Web Service的客户软件还是Web Service。当然也可以是任何其他的格式。
REST的要求
- 客户端和服务器结构
- 连接协议具有无状态性
- 能够利用Cache机制增进性能
- 层次化的系统
- Code On Demand - Javascript
关于状态
应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次經過无状态的连接协议传送的信息必須包含应用中所有的状态信息。
实现举例
例如,一个简单的网络商店应用,
列举所有商品,GET http://www.store.com/products具体某一件商品,
GET http://www.store.com/product/12345下单购买,
POST http://www.store.com/order, <purchase-order> <item> ... </item> </purchase-order>
REST的优点
- 可以利用缓存Cache来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对与其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好
外部链接
- W3C Web Services Activity home page
- Web Services Architecture (W3C Working Group Note)
