http://www.blogjava.net/Jennifer/archive/2011/01/09/342644.html
REST顾名思义:Representational State Transfer(表述化状态转移)。REST两个基本概念:
- 资源(Resource):将信息抽象为资源,任何能够命名的信息(包括数据和功能)都能作为一个资源,一张图片,一份文档,一个服务(如上传图片),一个其他资源的集合等。 资源是到一组实体的概念上的映射,而不是在特定时刻与该映射相关联的实体的映射。例如,“最新上传的图片”是一个值经常变化的映射,但是“2011/1/9上传的图片”的映射是静态。它们是截然不同的资源,即使某一时刻它们可能会映射到相同值的集合。
- 表述(Representation): 一个资源当前或预期的状态,资源是一个随时间变化的函数,该函数将时间t映射到一个实体或值的集合,集合中的值可能是资源的表述。REST组件通过URI来获得资源的表述并对资源执行动作,并在组件间传递该表述。
举购物网站系统的例子,products通过加入购物车到orders,经过付款订单到purchase,然后到delivery。其中products和orders是资源,可以通过/products?color=green和/orders/2007/11表示;而purchase和delivery是资源products和orders某一时间的状态。应用程序如同资源和表述组成的虚拟的状态机,通过不断的获取资源的表述来转变应用程序的状态,即所谓的表述化状态转移。
REST风格架构的约束:
- 客户-服务器:分离关注点,将用户接口(如用户界面)和数据存储分离,如果接口不变,组件可独立进化。
- 无 状态:从客户端道服务器的每个请求必须包含理解该请求所必需的所有信息,不能利用任何存储在服务器上的上下文。提高了系统的可扩展性,其优点有三:可见 性,监视系统不必为了确定一个请求的性质而去查看请求之外的多个请求;可靠性,减轻了从局部故障恢复的任务量,可以快速定位;可伸缩性,不必在多个请求之 间保存状态,允许服务器快速释放资源,并且服务器不必跨请求管理资源。缺点是,由于不能将状态保存在服务器上的共享上下文中,增加了请求中发送的重复数 据,降低网络性能,因此有了约束三。
- 缓存:请求响应中的数据显示或隐式的标记为可缓存的不可缓存的。缓存可以为以后相同的请求重用这个响应的数据。但是缓存管理不好,会降低可靠性,导致缓存中陈旧的数据与直接访问服务器得到的数据差别很大。
- 统一接口:组件之间要有统一的接口,是REST风格架构区别其他风格架构的核心特征。REST由四个接口约束定义:资源的识别,web-based系统中资源由URI表示,数据库存储系统中资源还可以是XML,JSON等;通过表述对资源执行的动作:表述中包含操作该资源的信息,如增删改查,映射到HTTP协议的GET,POST,PUT,DELETE方法;自描述的消息:消息中包含如何处理该消息的信息,如哪个sevlet处理,响应中包含可不可以被缓存等信息;作为应用状态引擎的超媒体。
- 分层系统:通过限制组件的行为,即每个组件只能看到与其交互的紧邻层,将架构分解为若干等级层,提高各层的独立性。
- 按需代码:客户端知道如何访问资源,但是不知道如何处理它,向服务器发送对于如何处理资源的代码的请求,接收这些代码,然后在本地执行代码。
-------------------------------------------------------
使用Spring框架实现RESTful
copy:http://www.importnew.com/5163.html
RESTful web服务最近有多流行已经无需我多评价。是的,你的确需要它,但如何选择呢?我尝试了不同的Java REST框架,基本上都是Jersey和Spring MVC。我认为大多数情况下Spring是构建RESTful应用程序的首选。
如果你已经有了一个Spring app,接下来不需要做任何复杂的配置就可以用Spring开始实现RESTful API了。只要使用标准的注解配置向下面这样配置JSON视图解析器(view resolver ):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//这个示例使用了Groovy,相信你能够理解 @Constoller @RequestMapping('/api/user') class UserApi { @RequestMapping(value = '/{id}', method = RequestMethod.GET)
User get(@PathVariable long id) {
//... load user, etc
}
@RequestMapping(value = '/{id}', method = RequestMethod.POST)
User update(@PathVariable long id, @RequestModel User updated) {
//... load user, update values, etc
}
} |
当然,你可以不用JSON转而XML或者使用ProtoBuf以及其他什么。这很简单而且不会因为修改造成代码错误,比起Jersey要简单很多。
通常你的应用程序除了RESTful API还会有其他东西,比如标准的HTML页面、文件下载/上传、复杂的API请需求数据流处理、重要的后台处理、数据库访问、复杂的认证和授权与外部服务集成等等。Spring框架可以将这些完成得很好。同时我最喜欢的就是,通常会有两种办法达成目标:“应急办法”和常规办法:)
实际上我是Grails web的粉丝,我真的很喜欢它并且为Grails写了一些插件。我相信构建传统 web应用方面Grails是最好的框架。但是当我看见采用RESTful构建和一些现代应用之后(大多数是“单页面App”)——我总是会建议使用Spring MVC (+ Groovy,这又是另外一个话题)。
相关推荐
"Roy Thomas Fielding博士论文REST(中文版)" 本篇论文是Roy Thomas Fielding博士的博士论文,主要讨论了网络软件架构设计和基于网络的架构风格。 Fielding博士是HTTP和URI等Web架构标准的主要设计者,Apache HTTP...
Roy Thomas Fielding博士关于REST规则的文章,Roy Thomas Fielding博士关于REST规则的文章,Roy Thomas Fielding博士关于REST规则的文章,Roy Thomas Fielding博士关于REST规则的文章,Roy Thomas Fielding博士关于REST...
Roy Thomas Fielding博士论文REST中文版+英文版 Architectural Styles and the Design of Network-based Software Architectures
### 架构风格与基于网络的软件架构设计 #### Roy T. Fielding博士论文解析 **Roy T. Fielding**博士的这篇...对于希望深入了解REST架构及其在现代软件工程中的应用的专业人士来说,这篇论文是不可或缺的学习资源。
《REST-EPUB:.epub中的Roy Fielding的REST论文》是一份深入探讨REST(Representational State Transfer,表述性状态转移)架构风格的重要资源,它以电子书(.epub)的形式呈现,方便读者在各种设备上阅读。Roy ...
REST 架构风格是一种互联网应用构架风格,由 HTTP 协议的作者 Roy Fielding 博士在其博士论文中提出。与以远程对象为核心的 ORB 和以服务为核心的 SOA 相比,以资源为核心的 REST 让我们从崭新的视角审视互联网应用...
Fielding博士在论文中详细介绍了几种常见的架构风格,包括数据流风格、复制风格、分层风格等,并着重阐述了REST架构风格的特点及优势。 #### 数据流风格 数据流风格是一类将计算过程视为数据流过一系列固定步骤的...
REST创始人的博士毕业论文,描述了REST的涵义,原创的,还是比较权威的,包括中英文的两种PDF版本。
Roy Thomas Fielding博士是HTTP协议的主要作者之一,他在博士论文中首次完整地定义了REST架构风格。他的研究工作对现代互联网的架构有重大影响,为Web服务和API设计提供了理论基础。 3. RESTful API设计原则: - ...
REST架构风格基于一组网络架构原则和约束,它们定义了如何使用HTTP、URI和相关的Web技术来构建可交互的服务。REST的核心在于资源的抽象,每个资源都可以通过一个唯一的URI来标识,而对资源的操作则通过标准的HTTP...
该项目的主要目标是:在提供同等功能的同时,尽量遵守Roy Fielding博士论文中所阐述的REST的目标。它的另一个主要目标是:提出一个既适于客户端应用又适于服务端的应用的、统一的Web视图。 Restlet的思想是:HTTP...
这表明Fielding博士在互联网架构设计领域具有举足轻重的地位,他的理论和贡献对于理解和学习REST架构风格至关重要。 文档的内容涵盖了软件架构的基础知识,包括运行时抽象、架构元素(组件、连接器和数据)、配置、...
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,...