REST介绍

Posted Leoxlu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REST介绍相关的知识,希望对你有一定的参考价值。

 

以下内容是与某机构的一个约稿的部分,但最后没有发表,发布出来,以飨各位REST爱好者学习!文后有Fielding博士的论文和HTTP协议规范,可以下载。 


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技术应用的意义有两点: 

第一、REST使得现在流行的互联网应用在架构设计上回归本质,能够更加充分的利用REST架构风格中的各种架构属性提升应用的品质。 

第二、REST的轻量级、简单的特点更现行某些技术的复杂性形成鲜明的对比,使得构建应用或服务变得简单易行。在开发者来看,一旦理解了REST技术内容,设计应用系统或服务时,可以使架构更加接近WEB本质,充分利用已有的基础设施。对于应用系统或服务的使用者来将,REST推荐使用有意义的URI作为资源接口,系统更加容易理解,系统间交互或人机交互更加友好。 

以上是关于REST介绍的主要内容,如果未能解决你的问题,请参考以下文章

技术梳理:rest的概念和方法

REST介绍以及常用的返回状态码

SOAP Web 服务介绍

REST

理解本真的REST架构风格

理解本真的 REST 架构风格