REST字面意思是表示性状态转移,它是一种充分利用Http协议的BS架构风格.为什么这么讲呢?我们看看Roy Thomas Fielding博士对于REST机构风格的定义.REST架构风格是一种组合架构风格:
1)REST整体架构上使用CS风格,这种风格其实也是BS架构风格的基础风格;
2)REST在服务端采用无状态架构风格,无状态(面向非连接)也是BS架构风格典型特点,传统的CS架构一般都是有状态的,是面向连接的.
3)缓存风格:在服务端提供必要的缓存风格,以提高系统性能.缓存风格是一种常见的架构设计风格,目的是解决系统各部分之间的由于访问速度差异而导致的部分资源无法充分利用的问题,例如CPU的高速缓存,内存的设置都是这个目的.BS风格和传统CS风格都会采用这种机制.
4)统一接口:统一接口其实是相对的,在不同层次上统一接口的代价也是不同的,层次越低代价越大,层次越高,代价越低.REST架构风格要求在组件层上采用统一架构风格,从而简化整体架构.REST风格中的这种接口统一是针对WEB开发的,目的是简化站内子系统之间和站间系统之间的访问.
5) 分层系统:分层的好处是可以使得每一层的组件仅仅依赖于与之交互的紧邻层,而且分层系统本身就要求对其它层提供服务的接口应该统一而稳定.因此这种风格可以简化系统的复杂性(每一层只需要专注于本层逻辑,而且修改也只会影响紧邻层,不会导致蔓延问题),提高了系统的灵活性(原因非常简单,只要保持稳定的接口,替换和重新实现某一层组件都非常用意),C跟S本身就是分层的,这里的分层风格约束,主要是指S端(C端因为是基于脚步解释,而且多为展示,分层相对受限),而S端的分层可以采用MVC,其中对于M还可以分解为业务逻辑层,数据访问层,数据库访问层.分层风格的缺点是由于层次增加会带来性能上的消耗,需要利用共享缓存来弥补分层所带来的性能上的损失.
6)按需代码:这种风格最大好处在于部署和动态行为方面.采用这种分格,客户端可以根据需要下载代码(JS脚本,Applet,ActiveX等).但这种风格能否实现的前提是客户端可以执行或者解释执行下载的代码.
WEB系统的目的是共享和传递信息,REST风格将所有信息都抽象为一种资源,并给定一个唯一的标识(URI).需要注意的是这里的资源不是一类,而是具体的资源实体或者实体集合,例如对于客户来说,一般情况下不能看作是一种资源,而所有客户,华北地区的客户,客户张三则可以视为一种资源,而且都各自有唯一标识.不人为地通过类型和实现来区分资源的好处是可以简化访问的语义理解,访问者除了需要知道要访问的资源的URI,其余的都不用关心(本质上来讲这其实是有意义编码,无意义编码和混合编码之间的区别).而且URI所代表的资源可以是静态映射的(2010年10月1日的天气)的,也可以是动态映射的(今天的天气).
REST风格通过URI访问得到的信息是自我描述的,包括了信息本身和表示方式(html,xml,媒体数据流等).信息的描述是采用最通用的协议-HTTP(超文本转换协议)来进行的.客户端根据信息的表示解析和展示信息本身.而交互是通过HTTP的几个基本操作(GET,PUT,POST,DELETE)来实现.
一些看法:
1) REST与MVC(至少对于微软的Aspnet MVC而言)架构风格并不矛盾,他们之间并不存在谁替换谁的问题;
2)REST风格非常适合站间或者企业间集成应用,比WebService,Corbra,DCOM,JRMI都要简单通用;
3)如果将URL地址后的参数看作是URL本身的一部分,那么每一个URL都代表一个唯一的资源(URI),而用/来标识参数和用?部分标识参数其实是等价的,但对外来说,用/要简单些;
4)REST的核心在于充分利用Http协议;
5)REST返回的数据及表示或者动态代码需要客户端解释,有利也有弊,不利的地方当然是性能和“非强类型”;
6)如果采用RESTfull,一个随之而来的是URI泛滥和URI体系表达设计的复杂性问题,因此原作者对此风格的建议是用于粗粒度应用;
7)REST架构风格所假定的资源状态相对简单,并不适合资源状态非常复杂的应用(不是不可以,是不适合);
8)REST的天生支持分布式架构,其实是Http协议和BS架构风格所决定的;
PS:有些认为有面向URI设计,这跟测试驱动开发一样,都是概念性东西多一些,本质上其实都是面向需求设计.
PS:微软的MVC估计是在Roy博士发表文章之后做的设计,里面带有很强的REST风格.
分享到:
相关推荐
但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。 另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要...
新兴的Ajax Web客户机架构风格让融入式Web应用程序与REST架构风格协调一致。使它们可以尽享REST那些出色的特性,同时又消除了应用程序违背REST准则时带来的不良特性。本文讨论了对于那些需要动态和个性化的用户界面...
WEB框架——REST原理(架构风格与基于网络的软件架构设计)
基于REST架构风格的Web+20实现.pdf
基于REST架构风格的云物理服务器部署机制.pdf
Falcon是构建REST架构风格云API的高性能Python框架
本文是“深入探索REST”专栏系列深度内容中的第二篇,它将带您领略REST架构的起源、与Web的关系、REST架构的本质及特性,以及REST架构与其他架构风格之间的比较。在移动互联网、云计算迅猛发展的今天,作为一名Web...
rest架构风格,web实例、rest架构风格,web实例
(REST)_架构风格与基于网络的软件架构设计
符合REST架构风格的Web服务(称为Rest API)可在Internet上的计算机系统之间提供互操作性。我们在杰克逊的帮助下使用Sping框架实现了该服务。 微服务 春天休息 介绍 这个项目展示了测试Spring Boot Application的...
一起了解REST的内在,认识REST的优势,而不再将它当作是“理所当然” 作为Web者,你可能...确实是这样,REST已经成为Web世界的一种内在架构原则。这主要是因为REST的产生确实与HTTP有着密不可分的。REST的提出者Roy
web之父的博士论文,Restful API的最佳描述。这篇论文定义了一个框架,...然后我介绍了表述性状态转移(Representational State Transfer,REST)的架构风格,并且描述了如何使用REST来指导现代Web架构的设计和开发。
它代表了分布式超媒体系统的体系结构风格,该风格是Roy Field在他的论文中定义的。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则。本手册将为您...
对于建造分布式和企业级的应用来说,REST架构风格真地提供了一个可行的替代选择吗?在《REST实战》这本富有洞察力的书中,三位SOA专家对于REST进行了讲求实际的解释,并且通过将Web的指导原理应用到普通的企业计算...
对于建造分布式和企业级的应用来说,rest架构风格真的提供了一个可行的替代选择吗?在这本富有洞察力的书中,三位soa专家对于rest进行了讲求实际的解释,并且通过将web的指导原理应用到普通的企业计算问题中,向你...
又如REST架构风格,体现了对资源命名、请求处理和资源物理表现形式的关注点分离。资源的名称与请求资源时服务器的处理方式无关,请求者无需知道服务器端采取的技术,并且请求者本来就不关心服务器端的处理技术。资源...
使用guice webwind expressme guice框架搭建的项目,支持GUICE AOP事物,详细教程我后续会写在博客记中
REST(Representational State Transfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年Roy Thomas Fielding的博士论文。 一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。 ...