REST架构风格是全新的针对Web应用的开发风格,是当今世界最成功的互联网超媒体分布式系统架构,它使得人们真正理解了Http协议本来面貌。随着 REST架构成为主流技术,一种全新的互联网网络应用开发的思维方式开始流行。
REST是什么
REST是英文Representational State Transfer的缩写,中文翻译为“表述性状态转移”,他是由Roy Thomas Fielding博士在他的论文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。REST本身只是为分布式超媒体系统设计的一种架构风格,而不是标准。
基于Web的架构,实际上就是各种规范的集合,这些规范共同组成了Web架构。比如Http协议,比如客户端服务器模式,这些都是规范。每当我们在原有规 范的基础上增加新的规范,就会形成新的架构。而REST正是这样一种架构,他结合了一系列的规范,而形成了一种新的基于Web的架构风格。
传统的Web应用大都是B/S架构,它包括了如下一些规范 。
客户-服务器
这种规范的提出,改善了用户接口跨多个平台的可移植性,并且通过简化服务器组件,改善了系统的可伸缩性。最为关键的是通过分离用户接口和数据存储这两个关注点,使得不同用户终端享受相同数据成为了可能。
无状态性
无 状态性是在客户-服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的,即从客户到服务器的每个request都必须包含理解该 request所必须的所有信息。这个规范改善了系统的可见性(无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前 request,而不必了解所有的request历史),可靠性(无状态性减少了服务器从局部错误中恢复的任务量),可伸缩性(无状态性使得服务器端可以 很容易的释放资源,因为服务器端不必在多个request中保存状态)。同时,这种规范的缺点也是显而易见得,由于不能将状态数据保存在服务器上的共享上 下文中,因此增加了在一系列request中发送重复数据的开销,严重的降低了效率。
缓存
为 了改善无状态性带来的网络的低效性,我们填加了缓存约束。缓存约束允许隐式或显式地标记一个response中的数据,这样就赋予了客户端缓存 response数据的功能,这样就可以为以后的request共用缓存的数据,部分或全部的消除一部分交互,增加了网络的效率。但是用于客户端缓存了信 息,也就同时增加了客户端与服务器数据不一致的可能,从而降低了可靠性。
B/S架构的优点是其部署非常方便,但在用户体验方面却不是很理想。为了改善这种情况,我们引入了REST。
REST在原有的架构上增加了三个新规范:统一接口,分层系统和按需代码。
统一接口
REST 架构风格的核心特征就是强调组件之间有一个统一的接口,这表现在REST世界里,网络上所有的事物都被抽象为资源,而REST就是通过通用的链接器接口对 资源进行操作。这样设计的好处是保证系统提供的服务都是解耦的,极大的简化了系统,从而改善了系统的交互性和可重用性。并且REST针对Web的常见情况 做了优化,使得REST接口被设计为可以高效的转移大粒度的超媒体数据,这也就导致了REST接口对其它的架构并不是最优的。
分层系统
分层系统规则的加入提高了各种层次之间的独立性,为整个系统的复杂性设置了边界,通过封装遗留的服务,使新的服务器免受遗留客户端的影响,这也就提高了系统的可伸缩性。
按需代码
REST允许对客户端功能进行扩展。比如,通过下载并执行applet或脚本形式的代码,来扩展客户端功能。但这在改善系统可扩展性的同时,也降低了可见性。所以它只是REST的一个可选的约束。
REST的设计准则
REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:
网络上的所有事物都被抽象为资源(resource);
每个资源对应一个唯一的资源标识符(resource identifier);
通过通用的连接器接口(generic connector interface)对资源进行操作;
对资源的各种操作不会改变资源标识符;
所有的操作都是无状态的(stateless)。
REST中的资源所指的不是数据,而是数据和表现形式的组合,比如“最新访问的10位会员”和“最活跃的10为会员”在数据上可能有重叠或者完全相同,而 由于他们的表现形式不同,所以被归为不同的资源,这也就是为什么REST的全名是Representational State Transfer的原因。资源标识符就是URI(Uniform Resource Identifier),不管是图片,Word还是视频文件,甚至只是一种虚拟的服务,也不管你是xml格式,txt文件格式还是其它文件格式,全部通过 URI对资源进行唯一的标识。
REST是基于Http协议的,任何对资源的操作行为都是通过Http协议来实现。以往的Web开发大多数用的都是Http协议中的GET和POST方 法,对其他方法很少使用,这实际上是因为对Http协议认识片面的理解造成的。Http不仅仅是一个简单的运载数据的协议,而是一个具有丰富内涵的网络软 件的协议。他不仅仅能对互联网资源进行唯一定位,而且还能告诉我们如何对该资源进行操作。Http把对一个资源的操作限制在4个方法以内:GET, POST,PUT和DELETE,这正是对资源CRUD操作的实现。由于资源和URI是一一对应的,执行这些操作的时候URI是没有变化的,这和以往的 Web开发有很大的区别。正由于这一点,极大的简化了Web开发,也使得URI可以被设计成更为直观的反映资源的结构,这种URI的设计被称作 RESTful的URI。这位开发人员引入了一种新的思维方式:通过URL来设计系统结构。当然了,这种设计方式对一些特定情况也是不适用的,也就是说不 是所有的URI都可以RESTful的。
REST 之所以可以提高系统的可伸缩性,就是因为它要求所有的操作都是无状态的。由于没有了上下文(Context)的约束,做分布式和集群的时候就更为简单,也 可以让系统更为有效的利用缓冲池(Pool)。并且由于服务器端不需要记录客户端的一系列访问,也减少了服务器端的性能。
使用REST架构
对于开发人员来 说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式: 通过URL来设计系统结构。在REST中,所有的URL都对应着资源,只要URL的设计是良好的,那么其呈现的系统结构也就是良好的。这点和TDD (Test Driven Development)很相似,他是通过测试用例来设计系统的接口,每一个测试用例都表示一系列用户的需求。开发人员不需要一开始就编写功能,而只需要 把需要实现的功能通过测试用例的形式表现出来即可。这个和REST中通过URL设计系统结构的方式类似,我们只需要根据需求设计出合理地URL,这些 URL不一定非要链接到指定的页面或者完成一些行为,只要它们能够直观的表现出系统的用户接口。根据这些URL,我们就可以方便的设计系统结构。从 REST架构的概念上来看,所有能够被抽象成资源的东西都可以被指定为一个URL,而开发人员所需要做的工作就是如何能把用户需求抽象为资源,以及如何抽 象的精确。因为对资源抽象的越为精确,对REST的应用来说就越好。这个和传统MVC开发模式中基于Action的思想差别就非常大。设计良好的URL, 不但对于开发人员来说可以更明确的认识系统结构,对使用者来说也方便记忆和识别资源,因为URL足够简单和有意义。按照以往的设计模式,很多URL后面都 是一堆参数,对于使用者来说也是很不方便的。
既然REST这 么好用,那么是不是所有的Web应用都能采取此种架构呢?答案是否定的。我们知道,直到现在为止,MVC(Model-View-Controller) 模式依然是Web开发最普遍的模式,绝大多数的公司和开发人员都采取此种架构来开发Web应用,并且其思维方式也停留于此。MVC模式由数据,视图和控制 器构成,通过事件(Event)触发Controller来改变Model和View。加上Webwork,Struts等开源框架的加入,MVC开发模 式已经相当成熟,其思想根本就是基于Action来驱动。从开发人员角度上来说,贸然接受一个新的架构会带来风险,其中的不确定因素太多。并且REST新 的思维方式是把所有用户需求抽象为资源,这在实际开发中是比较难做到的,因为并不是所有的用户需求都能被抽象为资源,这样也就是说不是整个系统的结构都能 通过REST的来表现。所以在开发中,我们需要根据以上2点来在REST和MVC中做出选择。我们认为比较好的办法是混用REST和MVC,因为这适合绝 大多数的Web应用开发,开发人员只需要对比较容易能够抽象为资源的用户需求采取REST的开发模式,而对其它需求采取MVC开发即可。这里需要提到的就 是ROR(Ruby on Rails)框架,这是一个基于Ruby语言的越来越流行的Web开发框架,它极大的提高了Web开发的速度。更为重要的是,ROR(从1.2版本起)框 架是第一个引入REST做为核心思想的Web开发框架,它提供了对REST最好的支持,也是当今最成功的应用REST的Web开发框架。实际上,ROR的 REST实现就是REST和MVC混用,开发人员采用ROR框架,可以更快更好的构建Web应用。
对开发人员来说,REST不仅仅在Web开发上贡献了自己的力量,同时也让我们学到了如何把软件工程原则系统地应用于对一个真实软件的设计和评估上。
- 浏览: 189065 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
duguyiren3476:
我现在的版本是drill0.8.0版本的,搭建了分布式4个节点 ...
walter的drill笔试之二-安装与部署 -
zhangth:
写的不错,受教了
图片分离之图片服务器问题 -
lt200819:
zh55com 写道如何查询mysql数据?如何查询hbase ...
walter的drill笔试之二-安装与部署 -
zh55com:
如何查询mysql数据?如何查询hbase数据?
walter的drill笔试之二-安装与部署 -
QuarterLifeForJava:
不错,挺好的,那如果是update、delete、insert ...
Mysql百万级数据查询优化
发表评论
-
jsp velocity freemarker 比较
2013-09-06 10:57 736jsp是大家最熟悉的技术 优点: 1、功能强大,可以写jav ... -
HTTP协议详解
2013-08-20 11:57 782引言 ... -
RESTFul以及实现
2013-08-20 11:42 782什么是REST? REST (REpresentatio ... -
spring security3.1开发样例
2013-07-13 15:33 969Spring Security3的使用方法有4种: ... -
springMVC和struts2的比较
2013-07-07 18:41 10871:spring3 mvc开发效率高于struts 2: ... -
mybatis与hibernate比较
2013-07-07 14:57 1083最近做了一个Hibernate ... -
mybatis生成工具MyBatis Generator
2013-06-19 10:28 1298eclipse插件安装地址:http://mybatis. ... -
nginx
2013-05-06 17:37 780Nginx ("engine ... -
webservice
2013-03-28 11:20 910现在webservice加xml技术已经逐渐成熟,但要真正 ... -
frame,iframe,frameset之间的关系与区别
2013-01-02 14:03 908原文出处:http://www.cnblogs.com ... -
JPA2.0 条件查询
2012-10-10 21:05 1395Java代码 packag ... -
灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
2012-08-18 15:03 1249我们在使用 Hibernate 时一般只会关注是否显示生 ... -
jsp编码格式问题
2012-05-23 16:20 10831 所有的 .java|.jsp|.html|.xml 源文件 ... -
<%@include%>和<jsp:include>的区别
2012-05-18 10:20 941<%@include%>和<jsp:incl ... -
图片分离之图片服务器问题
2012-02-17 22:09 1391现在很多中小网站(尤其是 Web 2.0 站点) 都允许用户上 ... -
坑爹的JPA
2011-11-24 17:48 853order是数据库的固有表格,不能新建order表; memb ... -
修改网站的小图标
2011-11-23 22:02 833通过查看你的源代码发现。 您的设置有问题: <link ... -
jpa得到JDBC的connection
2011-11-23 19:21 2100JPA 2.0 entityManager.getTransa ... -
原样输出HTML
2011-11-21 20:21 1123<textarea></textarea&g ... -
JPA查询语句
2011-11-14 15:03 21921.查询所有信息 Query q = em.createQu ...
相关推荐
"基于RIA+REST架构的房产管理WebGIS平台研究" 该论文研究了基于RIA+REST架构的房产管理WebGIS平台,旨在提高房产管理的效率和科学性。该平台通过集成housing-related功能机构、逐渐实现房产业务数据的空间化、在Web...
在本文中,我们将探讨基于REST架构的物联网数据平台的设计。文章主要关注于如何利用RESTful Web Services和数据库来存储和展示物联网应用中的数据。通过对给定文档的内容部分进行分析,可以提取出以下几个关键的知识...
【REST架构的WebGIS技术研究与实现】 随着WebGIS(Web Geographical Information System,网络地理信息系统)技术的迅速发展,用户对于基于简单网页技术的WebGIS的表现效果和交互性提出了更高要求。传统的WebGIS在...
总结来说,基于REST架构的Web服务设计是现代Web开发中常用的一种技术,它提供了简单、高效且易于扩展的服务接口,适用于各种规模的项目,特别是互联网和移动应用。通过遵循REST原则,开发者能够构建出更加灵活、可...
REST架构 详解 REST架构及实践
- 资源(Resource):在REST架构中,一切皆为资源,每个资源都有一个唯一的URI(Uniform Resource Identifier)来标识。 - 表述(Representation):资源的状态可以通过不同的格式(如JSON或XML)进行表述。 - ...
但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。 另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要...
### REST架构的网络服务知识点概览 #### 一、REST架构概述 REST(Representational State Transfer)是一种软件架构风格,最初由Roy Fielding在他的博士论文中提出,旨在为分布式超媒体系统提供一种设计理念。REST...
**基于REST架构的Web2.0研究** REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,主要应用于Web服务的构建,尤其在Web2.0时代,REST架构的设计原则和模式成为了...
在深入探讨“基于REST架构风格的Web+20实现”这一主题之前,需要先了解REST(Representational State Transfer)架构风格的基本概念以及Web 2.0的相关技术背景。 REST是一种软件架构风格,最初由Roy Fielding在他的...
【标题】:“基于REST架构的Node.js博客系统” 在当今的Web开发领域,构建一个功能完善的博客系统是一项常见的任务,特别是在毕业设计或者个人项目中。本项目采用的是REST(Representational State Transfer)架构...
REST 架构风格详解 REST 架构风格是基于资源的架构风格,它强调面向资源的设计和开发方式。RESTful 是一种满足 REST 架构风格约束条件和原则的应用程序或设计。其核心是面向资源,REST 专门针对网络应用设计和开发...
REST架构网页开发.Representational State Transfer (REST) is a style of software architecture for distributed systems such as the World Wide Web.
1. 无状态性:在REST架构中,每个请求都包含执行操作所需的所有信息,无需保存会话状态。这大大降低了服务器的负担,提高了系统的可伸缩性,同时也提高了系统的可靠性和效率。 2. 统一接口:REST要求所有服务器必须...
REST架构的核心概念包括资源、URI(Uniform Resource Identifier)、表示和操作。在资源管理平台中,每个设备或装置都可以视为一个资源,通过URI进行唯一标识,通过HTTP方法(如GET、POST、PUT、DELETE)进行操作。 ...