- 浏览: 1591512 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
摘 要:本文展示了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.
发表评论
-
WebService与RMI的区别及协作
2014-05-19 10:18 1629区别: RMI的客户端 ... -
session和cookie的区别,如何用session和cookie访问共享用户信息
2013-09-13 18:38 1861Cookie的机制 Cookie是浏览器(Use ... -
CXF+Spring+WSDL的Webservice实现(转)
2013-01-16 10:57 1945转自:http://www.blogjava.net/sxy ... -
CXF+Spring实现Webservice(简单例子-转)
2013-01-16 10:51 1293Apache CXF 是一个开放源代码框架,提供了用于方便地 ... -
XML的基本数据类型
2011-08-09 09:36 1650String、decimal、boolean、float、do ... -
理解类8583报文协议(转)
2011-07-18 17:52 3582我刚进入金融行业时, ... -
MQ使用指南(转载的)
2011-03-08 17:03 2769一.MQ基本操作 MQ中有几个很重要的组件:队列管 ... -
Rest与RPC比较
2010-11-10 09:15 8605基本概念 1. rest和rpc架 ... -
深入浅出REST
2010-11-09 14:33 1438【原文地址】:http://www ... -
理解Restful Web Service(二)
2010-11-09 12:58 1792对于restful web service,刚开始确实是个不太 ... -
Schema中的命名空间
2010-09-02 17:16 2252基本的XML Schema的使用就 ... -
Schema中elementFormDefault="qualified"所起的作用
2010-09-02 17:13 6113有的xsd文件的开头是这 ... -
Schema中import和include的区别
2010-09-02 16:42 2022http://davidwang.iteye.com/blog ...
相关推荐
在RESTful Web Service中,每个资源都有一个唯一的URI,通过这个URI,客户端可以获取或修改资源的状态。 在转账业务中,RESTful API设计通常涉及以下资源: 1. 账户(Account):每个账户都有自己的ID,可以使用GET...
首先,理解RESTful架构的关键概念: 1. 资源(Resource):在REST中,一切皆资源,通常由URI(Uniform Resource Identifier)唯一标识。在这个实例中,可能有一个名为"customer"的资源。 2. 统一接口:REST服务...
首先,理解RESTful架构风格的核心概念至关重要。REST强调资源的概念,通过URI(统一资源标识符)来唯一标识每个资源。HTTP方法则对应于对资源的操作,比如GET用于获取资源,POST用于创建新资源,PUT用于更新已有资源...
Java RESTful Web Service是现代Web应用开发中的一个重要概念,它基于Representational State Transfer(表述性状态转移)架构原则,提供了一种轻量级、高效且易于理解和实现的接口设计方式。在本PDF教程《Java ...
Java RESTful Web Service实战是Java开发领域中一个重要的实践教程,它主要涵盖了使用Java技术和RESTful架构风格来创建高效、可扩展的网络服务。REST(Representational State Transfer)是一种网络应用程序的设计...
### 解析Restful Web Service架构 #### 一、HTTP协议基础 HTTP(HyperText Transfer Protocol)是一种基于文档的协议,用于客户端与服务器之间的通信。它规定了一套标准的请求和响应格式,使得不同系统间的交互...
《Java Restful Web Service实战》源代码.zip是一个包含与Java Restful Web Service开发相关的实践项目源码的压缩包。...这个压缩包提供了一个宝贵的资源,有助于加深对Java RESTful Web Service开发的理解。
在IT行业中,RESTful Web Service是一种广泛采用的网络应用程序接口(API)设计风格,它基于Representational State Transfer(表述性状态转移)原则。本教程将深入讲解如何使用Java语言来创建RESTful Web Service。...
【标题】"MyEclipse下的Restful Web Service的Demo"是一个示例项目,展示了如何在MyEclipse集成开发环境中创建和使用RESTful Web服务。REST(Representational State Transfer)是一种软件架构风格,常用于构建Web...
Restful Web Service架构以其简洁的设计理念、易于理解的接口和良好的扩展性,在现代Web开发中占据了重要的地位。通过对HTTP协议的有效利用,RESTful服务不仅提供了高效的数据交换机制,还为构建灵活、可扩展的...
首先,让我们深入理解Restful服务的核心概念。REST(Representational State Transfer,表述性状态转移)强调的是客户端和服务器之间的松耦合。在ATM系统中,每个资源(如用户账户、交易记录)都有一个唯一的URI...
开发RESTful Web服务时,选择一个强大的集成开发环境(Integrated Development Environment, IDE)可以帮助提高效率。例如,IntelliJ IDEA或Eclipse都是很好的选择。 为了让服务可执行,我们需要配置相应的启动类,...
【RESTful Web Service】RESTful Web Service是一种轻量级的Web服务设计风格,它基于Representational State Transfer(表述性状态转移)原则,强调简洁、直接的交互方式。RESTful服务通常使用HTTP协议中的GET、POST...
# RESTful Web Service Primer ## 什么是REST? REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于客户端与服务器之间的交互模式。REST架构风格最初由Roy Fielding在其博士...
### RESTful Web Service 课程知识点概述 #### 一、REST简介 REST(Representational State Transfer)是一种用于构建软件应用程序的设计风格或架构模式,它利用现有的网络标准和技术来创建灵活、可扩展的服务。...
总之,构建一个简单的Spring Boot RESTful Web Service项目,你需要理解Spring Boot的项目结构、`@RestController`和HTTP方法注解的工作原理,以及如何处理HTTP请求和响应。随着项目深入,你还可以学习如何使用...
### RESTful Web Service Primer #### 一、REST简介 REST(Representational State Transfer)是一种用于设计网络应用程序的架构风格,最初由Roy Fielding在他的博士论文中提出。REST架构风格的核心理念是将网络上...
总的来说,理解RESTful Java Web Services不仅有助于提高Web服务的开发效率,还能提升服务的可维护性和易用性。结合Struts2框架,我们可以利用其强大的功能来构建更复杂的REST应用。通过阅读提供的"RESTful Java Web...
在介绍如何使用Jersey构建RESTful服务之前,我们有必要先理解RESTful服务的一些基本概念。RESTful服务应当定义其基础URI,比如一个服务的基础URI可能是***<appcontext>/resources。此外,它还应当声明其支持的响应...