摘 要:本文展示了Http协议的强大能力,如何定义什么是Restful Web Service架构以及以当今RPC式Web服务的对比,并解析了Restful Web Service架构的四个特征:可寻址性、无状态性、连通性和统一接口。
关键字:HTTP;URL;REST;Web服务
中图分类号:TP393.04 文献标识码:A
Analysis of Restful Web Service Architecture
ZHAO Bo-wen
(School of Software Engineering, Tongji University,Shanghai 201413)
Key words:HTTP;URL;REST;Web Service
1 Http协议基础
Http是一种基于文档的协议。客户端把文档放在Http信封里,然后发给服务器;服务器作为回应,把响应文档放到Http信封里,然后发回给客户端。
以下是一个Http请求:
GET /index.html HTTP/1.1
Host: www.google.com
Accept: text/html
Accept-Charset: utf-8
Connection: keep-alive
Http请求信息包括以下几个部分:
HTTP方法:对于这个请求时“GET”方法。Http方法的名称,就如同编程语言的方法名称,表示客户端希望服务器如何处理这封信。
路径:是URI主机名后面的信息。对于这个请求,URI是,路径是www.google.com。路径就是信封的地址。
请求报头:是一组关键字-值对,起元数据的作用,例如向主机、接受字体等元数据信息。
实体主体或表示:就是信封里的文档。在这里GET信封里没有文档,是空的。
Http响应信息包括三个部分。Http响应代码,通知客户端的请求是成功还是失败;响应报头,跟请求报头一样,起元数据的作用;实体主体或表示,相当于信封里具体的信件文档。
2 Web服务架构的分类
Http是Web服务所共有的,而Web服务之间的差别,是因为它们在两个问题上的做法不同:
一、客户端是如何把自己的意图传达给服务器的,具体地说就是客户端如何告诉服务器应该做什么样的操作。例如是获取数据、删除数据还是改写数据呢?这种对数据采取什么操作的信息,称之为方法信息。
二、客户端如何告诉服务器对哪些数据进行操作,例如服务器已知道客户端请求删除数据,但要删除那些数据呢?这种信息称为作用域信息。
2.1传统的RPC Web服务架构
RPC(远程过程调用)式Web服务通常从客户端收到一个充满数据的信封,然后返回一个充满数据的信封。常见的信封格式是SOAP。RPC架构意味着方法信息和作用域信息都放在信封实体里。
例如一个描述XML-RPC请求的HTTP信封:
POST /RPC HTTP/1.1
HOST www.search.com ….
<?xml version=”1.0”?>
<method>
<methodName>search</methodName>
</method>
在上述的RPC Web服务调用中,无论你向服务器请求什么方法,URI永远是www.search.com,Http方法永远是POST。
2.2 Restful Web服务架构
Restful Web服务是符合REST(Representational State Transfer)风格的Web服务架构,按照Roy Fielding博士论文里的评判标准是符合Web特点的。
Restful Web服务架构意味着,方法信息都在HTTP方法里;作用域信息都在URI里。
方法信息放到HTTP方法里就是指通过GET、PUT、DELETE等标准的HTTP方法来区分获得数据、修改数据或删除数据。使web服务有统一的接口。不像RPC式的服务将方法信息放到实体里,无论客户端请求获得数据或删除数据都使用POST方法,不具有统一接口,使web服务之间的交互困难。
作用域信息放在URI里就是指无论要操作什么样的数据都通过URI获得,这样一个Restful Web Service的请求信息的第一行就能了解客户端要做什么了。
例如:GET /Report/week HTTP/1.1 就是要获得周报表数据。而RPC式则将作用域数据放到实体里,使得RPC式的客户端请求格式复杂同时也不具有可寻址性(后面会详细介绍)。
3 Restful Web服务架构的四个特征
这里我们将阐述Restful Web服务架构的四个特征:可寻址性、无状态性、连通性和统一接口。
3.1Restful Web服务架构的资源概念
任何事物,只要具有被引用的必要,它就是一个资源。在Web服务上它至少有一个URI(统一资源标识符),URI既是资源的名称,也是资源的地址。在Restful Web 服务架构中URI只能指示唯一一个资源,但是响应信息可以包括多个资源,例如包括一些其它资源的连接信息。
3.2可寻址性
可寻址性是指用户可以通过唯一标示的信息获得特定的资源。例如在windows浏览器中,你要察看哪个文件夹直接敲入地址,即可直接访问。例如:C:\Program Files\Windows NT就可直接访问Windows NT文件夹。在Web服务中可寻址性就是指每一则服务都是可直接访问的,可以被添加到收藏夹里。Web是可寻址的似乎是理所当然的,可是许多Web应用却不是可寻址的。例如Gmail在线Email服务,Gmail的URI始终是http://mail.google.com/。
无论用户是什么操作,是要获得信息还是要上传信息,用户都不会看到其它URI,例如“关于狮子的邮件”这个资源就不是可寻址的。
在Restful Web服务中如果一个应用把资源发布出来,那么该应用就是可寻址的。因为资源是通过URI暴露的,所以一个可寻址的应用应该会为它提供的每一则信息都发布一个URI,URI的数量在Restful web Service中是无限的。可寻址性的优点是可以让客户端灵活自如使用Web Service上资源,甚至超出Web服务设计者的想象。可寻址性本身就是Web上的一大优点,在Restful web Service中我们应当保留这个优点。
3.3无状态性
无状态性意味着每个Http请求都是完全孤立的。当客户端发一个Http请求,请求里应当包含服务器实现该请求的所有信息,不依赖于任何以前的信息。假设本次请求需要之前请求的信息,那就应当将该信息也放到本次请求里。
Restful Web Service应当遵循这样的原则,从可寻址性方面考虑无状态性。无状态性要求:服务器可能的状态也是资源,也应该有自己的URI。客户端不必为了某个资源的请求而让服务器提前进入某种状态。例如google搜索网站,打开http://www.google.com/后在输入框填入”apple”,然后点击Search.得到相应结果。用户同样可以直接输入http://www.google.com/search?hl=en&q=apple&aq=f 得到搜索结果而不用先打开google主页,这就是无状态性的一种体现。
3.4连通性
表示(Representation)就是序列化的数据结构,把其中的数据取出即可丢弃。但在Restful Web Service中,表示应该是超媒体(HyperMedia),也就是说表示中不仅包含数据,还包含指向其它资源的连接。这种具有“连接”的特性,称为连通性。
连通性使服务器通过超媒体告诉客户端当前状态有哪些后续状态可以进入。例如在http://www.google.com/search?hl=en&q=apple&aq=f资源里的“下一页”连接起的就是这种推进作用——它指引你如何从当前状态进入下一个可能的状态。在Restful Web服务的文档中只要包含URI就可以指向本应用的其他状态,因为Restful Web Service是可寻址且无状态的应用。
3.5统一接口
在Restful Web Service中,我们对资源的操作仅限制为HTTP提供的基本操作,这里列举常用的四种方法:
?获取资源的一个表示:Http GET。
?创建一个新资源:向一个新的URI发送HTTP PUT或向一个已有URI发送HTTP POST。
?修改已有资源:向已有的URI发送HTTP PUT。
?删除已有资源:HTTP DELETE。
REST要求使用统一的接口,即每个服务器都以同样的方式使用HTTP接口。这样要求的意义在于:不论你对Web上哪个资源作GET请求,都意味着读取。统一接口令服务之间的交互更加容易。
参考文献:
[1]Roy Thomas Fielding Architectural Styles and the Design of Network-based Software Architectures Computer Science 2000.
[2] Fielding R T. Principled Design of the Modern Web Architecture. Proc. of the 2000 Intl.Conf.on Software Engineering (ICSE 2000), Limerick. Ireland. 2000- 06:407- 416.
[3]Leonard Richardson Restful Web Service[M] .电子工业出版社 ISBN 978-7-121-06227 2008-5.
分享到:
相关推荐
### 解析Restful Web Service架构 #### 一、HTTP协议基础 HTTP(HyperText Transfer Protocol)是一种基于文档的协议,用于客户端与服务器之间的通信。它规定了一套标准的请求和响应格式,使得不同系统间的交互...
### 解析Restful Web Service架构 #### 一、HTTP协议基础 HTTP(HyperText Transfer Protocol)是一种基于文档的协议,用于客户端与服务器之间的通信。在HTTP通信过程中,客户端通过发送带有特定请求方法(如GET、...
本文将深入探讨如何使用JAX-RS来构建RESTful Web Service,并结合实际代码示例进行解析。 首先,理解RESTful架构风格的核心概念至关重要。REST强调资源的概念,通过URI(统一资源标识符)来唯一标识每个资源。HTTP...
Java RESTful Web Service实战是Java开发领域中一个重要的实践教程,它主要涵盖了使用Java技术和RESTful架构风格来创建高效、可扩展的网络服务。REST(Representational State Transfer)是一种网络应用程序的设计...
在RESTful Web Service中,JSON常用于资源的表示,因为其结构清晰,易于解析,且在网络传输中比XML更加高效。 【URL资源地址定义】在RESTful设计中,资源通过URL(Uniform Resource Locator)进行定位。每个URL对应...
SOAP Web服务和RESTful Web服务是两种常见的Web服务交互方式,它们在设计理念、协议复杂度、数据格式和操作方式等方面存在显著的区别。 首先,SOAP(简单对象访问协议)是一种基于XML的协议,它允许不同系统之间的...
本篇文章将详细介绍如何在SAP环境中应用RESTful Web Service,以及与传统的SOAP Web服务进行对比。 首先,让我们来理解一下REST(Representational State Transfer)和SOAP(Simple Object Access Protocol)的区别...
Web Service则是基于XML的网络服务,通过SOAP(简单对象访问协议)将XML消息封装并发送,接收方同样解析SOAP消息进行处理。 二、SOAP协议 SOAP是XML Web Service的通信协议,它定义了如何将业务逻辑封装成XML消息,...
JSON Web Service库主要涉及到三个关键组件:ASM、Jersey和JSON。这些库文件在开发基于JSON的Web服务中起着至关重要的作用。 首先,我们来深入理解ASM-3.3.1.jar。ASM是一个Java字节码操控和分析框架,主要用于动态...
3. 爬取并解析SWF、JAR等文件,它们可能隐藏有Web Service的线索。 4. 模糊测试,通过尝试不同的输入来发现未公开的服务。 例如,可以使用工具swf intruder反编译SWF文件以寻找WSDL地址,或者利用Wfuzz工具进行模糊...
**Spring 3 创建 RESTful Web Services 知识点详解** RESTful Web Services 是一种基于 Representational State Transfer(表述性状态转移)架构风格的 Web 应用设计模式,它强调资源的表述和状态转换,常用于构建...
《RESTful Web Services Cookbook》是一本深入探讨REST(Representational State Transfer)架构风格在Web服务中的应用实践的书籍。REST是一种广泛应用于Web服务的设计模式,它强调通过HTTP协议来实现客户端与服务器...
RESTful Web Service使用HTTP方法(GET、POST、PUT、DELETE等)直接操作资源,相比SOAP,REST通常更简单,更适合轻量级的交互需求。 测试Web Service也是开发过程的关键部分,使用工具如SoapUI可以帮助开发者模拟...
CXF支持多种绑定和传输机制,包括JAX-RS(Java API for RESTful Web Services)。 **服务安全性** 在Web Service中,安全性通常涉及认证、授权、加密和消息完整性。例如,WS-Security可以用来添加数字签名和加密,...
### 使用Spring Boot构建RESTful Web服务 #### 一、引言 随着互联网技术的发展,Web服务已成为连接不同应用的关键组成部分。RESTful架构以其简洁、易理解的特点成为了构建Web服务的标准模式之一。Spring Boot作为...
综上所述,"从android中调用web service的源码.zip"可能包含了一套完整的Android调用Web Service的示例,包括了SOAP或RESTful请求的实现,数据解析,错误处理,以及异步操作的代码。通过学习这份源码,开发者可以...
3. **JAX-RS**(Java API for RESTful Web Services):JAX-RS是基于Java的RESTful Web服务规范,用于创建REST风格的Web服务。 ### 开发工具 开发Java Web服务通常使用集成开发环境(IDE)如Myeclipse10。此外,还...