如下内容是与某机构的一个约稿的部分,但最后没有发表,发布出来,以飨各位REST爱好者学习!文后有Fielding博士的论文和HTTP协议规范,能够下载。 git
1.1 REST概念的起源
随着全球计算机技术的突飞猛进,各类新技术层出不穷,在互联网领域,以谷歌,亚马逊,雅虎,脸谱等著名互联网公司为领袖,掀起了名为WEB2.0的技术革命。通过了漫长一段时间的摸索前行与总结经验,WEB2.0技术的发展更加注重WEB技术的效率、简单性,以及WEB的本质等方面的内涵。
在当前时期,咱们天天均可以看到许时髦的技术名词,如:Big Data,SOA, cloud computing,REST,Web Service等等,以致于一个WEB技术的初学者看到这些名词,会陷入一种焦躁的状态,不知道他们该从何学起,即使是阅读了一篇技术文章,或者读了几本相关的技术书籍,也不必定能抓住WEB技术的本质。WEB的本质是什么?这就要谈到WEB的起源,现代WEB技术基础的主要是奠定在美国加州大学欧文分信息与计算机科学博士Roy Thomas Fielding的一篇名为《架构风格与基于网络的软件架构设计》的博士论文,要弄清楚WEB的本质,首先应该对这篇论文进行深刻的学习和研究。
Roy Thomas Fielding博士是HTTP和URI等Web架构标准的主要设计者,Apache HTTP服务器的主要开发者。他在他的博士论文里提出了“架构风格”这个软件领域的专业术语,推导出一个称为“REST”的架构风格,并详细阐述了REST架构风格的推倒过程,指出不一样架构的评价标准就是其背后的的架构风格。值得注意的是,REST指的是一种架构风格的名称,这里的风格,不一样于咱们一般所说的个性化的含义,它表明的一组特征,在软件领域咱们把它叫作架构约束。
1.2 REST在软件架构中的位置
为何说REST就是现代WEB的本质或基础?他在咱们的软件架构中处于什么样的位置?带着这些疑问,咱们继续进行探讨。
咱们在前面谈到,REST实际上是Fielding博士提出一种基于网络的软件架构设计风格,其英文全称是“Representational State Transfer”,翻译成中文为“表述性状态转移”。对REST更通俗的解释就是:它是软件架构的一种分类,咱们把具备某一组特征的软件架构设计称之为REST Style。
REST的一个重要概念是对资源的抽象,资源能够用一个全局的定位符来引用,即咱们常常听到的URI这个网络术语。为了维护这些资源,网络组件之间、服务器端与客户端之间经过一种标准接口HTTP来交换这些资源的表现。REST最显著的几个特征以下:
1.网络上的全部事物都被抽象为资源。REST把全部网络的事物都抽象为资源(Resource)是一个全新的理念,这跟互联网早期人们认为:网络上的事物都是一个文档、一张图片有所区别的。这里的资源是抽象的概念,它能够是北京一天的天气,新浪网发布的一篇新闻,微博上一张图片等静态的概念,它也能够是银行的一笔转帐,github上某开源软件的一个版本更新这样动态的概念,它还能够是复数的概念,某电商网站今天最热卖的五个商品。总之,资源是抽象的概念,它是一个符号,至于它背后所指的是网络上的什么事务,这个并不重要。
2.每一个资源对应一个惟一的资源标识符。为了准确的表达资源这个抽象概念,W3C标准化组织设计一种符号进行资源的标识,这就产生URI标准规范,用URI来标识网络上的一个资源。
3.经过通用的链接器接口对资源进行操做。REST架构风格的一个实例就是HTTP协议。HTTP是REST架构中的链接器组件,它用来将软件组件间的通信链接起来。从软件应用层的协议来看,目前基于REST架构风格的 HTTP1.1协议能够说是一统天下。
4.对资源的各类操做不会改变资源标识符。对于资源的操做时经过HTTP协议来进行的,HTTP上的操做一般使用GET、POST、PUT、DELETE这四种,他们表明获取资源、建立资源、建立或更新资源、删除资源四个操做。HTTP的CRUD概念相似于数据库操做的CRUD操做。CRUD的规律来源于天然世界的“生、见、变、灭”的天然规律。
5.全部的操做都是无状态的。REST要求每一个客户端负责保存本身的状态,服务器应从每次与客户端的信息中得到足够多的内容,以识别客户端当前的状态,从而决定给予客户端怎样的反馈。
从上面五个特征来看,REST正是咱们目前接触的WEB技术的特征,而实际上支撑整个现代互联网应用的HTTP1.1协议和URI规范正是由Fielding博士主导设计的,并对其进行了参考实现。所以,对于对于WEB本质的学习,应从REST学起,而落实到具体的技术细节,咱们能够从HTTP协议开始。
对于咱们准备或正在构建基于WEB的应用程序或服务,应使用REST架构风格的特征所致使的架构属性对架构设计进行指导,从而更加有利于咱们构建一个高效的应用或服务,换句话说,REST是WEB软件架构的设计应遵照的设计准则或设计思想。
1.3 什么是RESTful Web Service
在WEB产生后,人们对WEB产生了浓厚的兴趣,以致于各类应用层出不穷,很快基于WEB的B/S结构代替了传统的基于桌面应用的C/S结构而成为复杂软件的主流方案。随着各应用之间数据交互的日益增多,出现不少新的交互技术,如XML-RPC、JSON-RPC这类应用层面基于HTTP的私有交互协议,慢慢的人们发现各个应用对外提供的服务接口规则不统一,集成起来有许多困难,因而出现SOAP协议,SOAP协议是用来解决服务接口的规范性问题。
SOAP协议扩展性很好,安全性也考虑的很全面,可是使用起来却有些复杂,更重要的是在互联网蓬勃发展的今天,人们愈来愈认识到追溯WEB的本质,才能创造出简单而又高效的WEB服务,因而一个新的名词RESTful web services应运而生, RESTful web services使用RESTful架构风格构建的服务,因为其轻量的特性和在HTTP上直接传输数据的能力,在互联网服务部署技术的选择上,使用RESTful风格构建服务正在逐渐成为基于SOAP技术的有力挑战者。
1.4 RESTful Web Service规范的发展
目前,在Java社区,关于RESTful Web Service规范有两个JSR规范,一个是JSR311规范,另外一个是JSR339规范,关于这两个规范还有另外两个名字,分别是JAX-RS1.0和JAX-RS2.0。JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格建立Web服务。JAX-RS使用了Java SE5引入的Java标注来简化Web服务的客户端和服务端的开发和部署。JSR339规范为JSR311规范的升级规范,目前JSR311规范与JSR339规范均已完成。
1.5 RESTful Web Service的实现方案
关于RESTful Web Service的实现方案有两种:一种是按照JAX-RS规范的标准实现,另一种是按照自定义的方式实现。
JAX-RS标准实现的框架比较有名的有:Jersey、Apache Wink等,其中,Jersey是JAX-RS规范的参考实现,比较有表明性。
非标准实现的框架中比较有名的有:Spring MVC3.0、Restlet等,其中,Spring MVC3.0因为Spring框架在开发社区的影响力,使得它在非标准实现中比较有表明性,而且使用人群较多。
另外、除了这些成熟的开发框架之外,要实现REST Web Service也能够利用 Apache URL重写机制,HTTPClient开发包,Java Servlet等方式实现。
1.6 REST技术应用的意义 REST技术应用的意义有两点: 第1、REST使得如今流行的互联网应用在架构设计上回归本质,可以更加充分的利用REST架构风格中的各类架构属性提高应用的品质。 第2、REST的轻量级、简单的特色更现行某些技术的复杂性造成鲜明的对比,使得构建应用或服务变得简单易行。在开发者来看,一旦理解了REST技术内容,设计应用系统或服务时,可使架构更加接近WEB本质,充分利用已有的基础设施。对于应用系统或服务的使用者来将,REST推荐使用有意义的URI做为资源接口,系统更加容易理解,系统间交互或人机交互更加友好。