REST的含义和RESTful架构入门

时间:2022-07-13 05:49:10

REST的含义和RESTful架构入门


 

 提纲

1、REST架构的作用

2、REST和RESTful

3、REST的具体含义

    3.1 资源实体

    3.2 资源实体的表现层

    3.3. 资源实体某一变现层的状态转化

    3.4 REST原则含义的总结

4、RESTful架构

5、什么是RESTful API

 

 

1、REST架构的作用

==================

在互联网出现之前,软件和网络是两个不同的领域,很少有交集。软件开发主要是开发针对单机环境的软件,比如以前的杀毒软件卡巴斯基、扫雷之类的;而网络则主要研究系统之间的通信。

但是,互联网的出现以后,逐渐出现了基于互联网的网络软件系统,于是,这两个领域开始融合。

现在我们必须考虑,如何开发在互联网环境中使用的软件,即我们日常所说的网站。越来越多的人开始意识到,网站即软件,而且是一种不同于以前单机软件的新型软件。网站开发,完全可以采用软件开发的模式。

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,正在被越来越多网站的采用。

以前网站都是前端和后端混在一起的,比如Jsp页面中同时有jsp代码和html代码。这种情况在桌面时代问题不大,但是,近年来移动互联网快速发展,各种类型的客户端逐渐出现,比如android手机、android平板、iphone、ipad等,开发者想为所有的客户端提供一套统一的服务器端程序,RESTful架构的服务器端程序可以做到。RESTful架构的服务器端可以通过一套统一的接口同时为Web,iOS和Android提供服务。

REST的含义和RESTful架构入门

如上面的图所示,服务器端统一提供一套RESTful API,webapp+ios+android作为同等公民调用这套API。 

 

 

2、REST和RESTful

==================

REST 是REpresentation State Transfer的缩写,这个词首先于2000 年出现在Roy Thomas Fielding 的博士论文中。Roy Thomas Fielding是一个很重要的人物,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注。

 

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。这个词组可以翻译为"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构

 

3、REST的具体含义

======================

这里对REST的具体含义和REST架构的具体内容进行说明。

 

3.1 资源实体

-------------------

在REST的名称"表现层状态转化"中,省略了表现层的定语。"表现层"其实指的是"资源"(Resources)的"表现层"。

所谓"资源",就是网络上的一个实体。它可以是一段包含在html文件中的文本、一张格式为jpg的图片、一首mp3音乐文件、一种服务等类似的一个具体的实体。通常用一个URI(统一资源定位符)指向它来在网络上定位它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以了。此URI就成了每一个资源的地址或是标识符。

这样以来,上网就可以看成是访问一系列的URI,得到一系列的实体的过程。也就是客户端和服务器端的传递实体进行互动的过程。

 

3.2 资源实体的表现层

----------------

"资源"是一种实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。比如,文本是一个资源实体,它的具体表现形式可以用txt格式,也可以是HTML格式、XML格式、JSON格式等;一个图片是一个实体,它的表现形式可以可以是jpg格式,也可以是png格式。

这就是资源和资源的表现层的关系,就是实体和实体的外在形式的关系,但是需要知道的是,一个实体总是以一种外在表现形式存在的。

URI只代表资源实体,不能代表它的表现层。所以,严格地来讲,很多网址最后的".html"后缀名是不必要的,因为这个后缀名表示的是实体的格式,属于"表现层"范畴,而URI应该只代表"资源"实体,至于资源实体的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是指定"表现层"的地方。

 

3.3 资源实体某一表现层的状态转化

-----------------------------------------------

访问一个网站的过程,就是客户端和服务器端的一个互动过程。具体来说,就是客户端不断通过URI来请求服务器端的资源实体,同时服务器端把资源实体通过HTTP响应消息发送给客户端。

Web的通信协议是HTTP协议,它是一个无状态协议。因此,客户端和服务端交互过程中的所有的状态都保存在服务器端。

因此,客户端操作服务器端,就是通过某种手段,使服务器端的实体发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,因为客户端总是和服务器端实体的某一个表现层进行交互,所以就是"表现层状态转化"。

客户端用到的手段,只能是HTTP协议。也就是说,在上网的过程中,客户端通过HTTP协议使得服务器端实体的表现层发生了状态的变化,这就叫做“表现层状态转化”。

 

客户端具体用HTTP的什么东西才能使服务器端实体的表现层发生状态变化呢?

客户端操作服务端实体状态的手段,具体来讲,就是HTTP协议中四个表示操作方式的动词——GET、POST、PUT、DELETE。客户端通过这四个动词来操作服务器端。

它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。也就是说,客户端通过HTTP协议的GET、POST、PUT、DELETE来对服务器端的实体进行增删改查,从而改变服务器端实体的状态。

 

3.4 REST原则含义的总结

以上介绍的就是REST原则的具体含义和基本要求。

总结一下,有如下三个关键点:

(1)使用URI来标识服务器端的资源实体,每一个URI代表一个资源。

(2)客户端和服务器之间,传递这种资源的某种表现层。客户端在请求服务器端的资源实体的时候,请求的是资源的某一种表现层,而服务器端在响应客户端的时候,也是给出请求的实体的对应表现层。

(3)客户端通过四个HTTP动词,对服务器端资源进行操作,从而使服务器端的资源实体发生状态变化,也就是"表现层状态转化"。

 

4、RESTful架构

======================

上面讲清楚了REST的具体含义,如果一个互联网软件系统的架构符合REST的3点基本要求,那么这个互联网软件系统的架构就是RESTful架构。

 

5、什么是RESTful API

======================

这里通俗地理解一下什么是RESTful API

以下是两种解释:

解释一:

RESTful API,无论它的名字多么高大上,它本质还是一个HTTP请求,POST也好,GET也罢,都是不同的数据提交方式。所以,能够决定一个Rest API的也就:URI、参数、请求方式、请求头等。

解释二:

来自https://www.zhihu.com/question/27785028 刘剑的回答

REST就是用http协议实现的函数声明
协议名加域名表示可见性
url域名后面的部分可以作为函数名(可以是多级的),也可以表示参数
http header里面的是函数参数(通常是一些身份验证、函数版本方面的参数)
url参数也可以作为函数参数(通常是与查询相关的参数)
http request body里面的报文数据也可以作为函数参数(通常是与插入更新相关的参数)
http method表示当函数名相同时,重载的是增删改查哪个操作(通常,POST表示增,DELETE表示删,PUT表示改,GET表示查)
http response就是函数返回值了

举例来说,以这道题的url来讲:https://www.zhihu.com/question/27785028,

http://zhihu.com表示全网可见

这个包里 question就是函数名

27785028是路径参数,表示题号
当我回答你的时候,请求的是POST下的重载,我输入的内容就作为报文参数
当知友访问这个链接的时候,浏览器接收到的http响应就是GET重载下的返回值

当然了,REST的运用是非常灵活的,以上只是对标准模式下的一种描述