`
anna_zr
  • 浏览: 196396 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

解析Restful Web Service

阅读更多
摘  要:本文展示了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.
分享到:
评论
1 楼 bryan.liu 2009-11-29  
非常清晰易懂的解释了浦东Web Service 和RESTful Web Service 之间的区别,好文

相关推荐

    解析Restful Web Service 架构

    本文展示了Http 协议的强大能力, 如何定义什么是Restful Web Service 架构以及以当今RPC 式Web 服务的对比,并解析了Restful web Service 架构的四个特征:可寻址性、无状态性、连通性和统一接口。

    解析Restful Web Service架构

    本文展示了Http协议的强大能力,如何定义什么是Restful Web Service架构以及以当今RPC式Web服务的对比,并解析了Restful Web Service架构的四个特征:可寻址性、无状态性、连通性和统一接口.

    RESTful Web Services 中文版.rar

    RESTful Web Services中文版 1,3,4章 缺第二章和其他章节,源码网无色会在第一时间补齐,敬请关注本页。 本身完整目录: 目录 序.......................................I. --------------------------...

    关于applicationx-www-form-urlencoded等字符编码的解释说明

    关于applicationx-www-form-urlencoded等字符编码的解释说明,挺有用的,如果你开发Restful Web service。

    毕业设计-旅游系统源码-trip-search:solr构建景点搜索引擎

    用到的技术主要有网络爬虫、HTML解析、中文分词、文档索引、空间搜索、RESTful Web Service、Ajax、Hybrid App、容器技术Docker、SolrCloud、集群等。 编写的系列开发文章发布在Gitbook,当然也希望大家去我的博客转...

    beanstalker:Beanstalker可帮助您从Maven部署到AWS Elastic Beanstalk中

    它还包含一个适用于AWS EB下RESTful Web Service的方便原型,另一个是战争叠加的基本原型。 少数链接: 这是您需要的链接: :从这里开始 :常见问题 :当出现错误时根本看起来不正确 :如果您知道如何解析mojo-...

    eBayBidSearchService:两种服务

    使用Java xml解析器解析eBay出价历史记录●用于存储提取的有用信息的desgin数据库结构●使用Apache Lucene编制出价信息索引●实现两种搜索功能:关键字搜索和项目搜索●使用JAX-RS和Jersey将搜索功能发布为RESTful ...

    大学期间做的各样项目:Java-Python-JavaScript-Vert.X-SpringBoot.zip

    一个简单的基于 Mahout库 的电影推荐系统,使用了 Redis 作为缓存,Vert.X 构建 web 服务以提供 RESTful 服务。[2019/12] simple-datamining-online 用 Spring Boot + Vue 实现的一个简单的在线数据挖掘,可上传...

    mnt-base开发工具包及源代码

    1. 基于Jetty的Restful ws框架,支持普通方式和注解方式,快速封装web service服务. 2. 基于mina的stream、xml数据格式的tcp通信服务和客户端的框架。 3. JSON数据解析。 4. JDBC封装(DAS) 5. 常用的工具。 包含源...

    [mnt-base] Java服务端开发工具包

    1. 基于Jetty的Restful ws框架,支持普通方式和注解方式,快速封装web service服务. 2. 基于mina的xml数据格式的tcp通信服务和客户端的框架。 3. JSON数据解析。 4. JDBC封装(DAS) 5. 常用的工具。

    java命名规范 开发规范

    开发一个需要对第三方应用发布的RESTful Service 步骤: a. 开发RS接口,提供如下Annotation; b. 开发RS接口实现,并提供如下Annotation; c. 配置applicationContext-rs.xml 备注: 所有Annotation的涵义...

    specs-pki-tokens:specs-pki-tokens 项目提供了用于处理以 JSON 格式表示的带有声明集合的数字签名令牌的基础设施

    specs-security-tokens 项目由以下模块组成: security-tokens-service:发布安全令牌的 RESTful Web 服务security-tokens-client:为请求、解析和验证安全令牌提供支持的库安全令牌的设计考虑了两个目标: 在不...

    网站架构技术

    web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构设计误区 一味追随大公司的解决方案 为技术而技术 企图用技术解决...

    JEECG快速开发平台-其他

    JEECG(J2EE Code Generation)是一款基于代码生成...插件开发,业务功能组件以插件方式集成平台,也可以单独部署发发布,有力支撑了SAAS云应用系统需求技术点二十二:专业接口对接机制,统一采用restful接口方式,集成

    flex3的cookbook书籍完整版dpf(包含目录)

    创建CairngormFrontController和ServiceLocator 21.8节.使用Cairngorm框架生成器生成应用程序骨架 21.9节.学习常用的提高性能的技巧 21.10节.在组件中创建元数据 第二十二章.模块(Modules)和运行时共享库(RSLs)(669)...

Global site tag (gtag.js) - Google Analytics