初识 REST(Representational State Transfer)


REST,直译过来就是“表述性状态传递”。
然而,这到底是个什么鬼?它又有什么卵用呢?(写这篇博客的笔者此时有点烦躁...)
且听笔者细细道来...


铺垫###

作为相关基础很少的我,在学习这个新概念时,首先先学习了这么几个相关知识:

1.URI(统一资源标识符)

顾名思义,互联网中的URI是一种用来表示网络资源的字符串。这些互联网上的资源可以包括 HTML 文档、图像、程序等都可以利用URI唯一的标识出来。
这种用来标识资源的字符串是需要按照一定的规则进行书写的,例如:

协议://主机IP/资源存储路径

上述形式就是一种URI的标识形式,称为URL 。这种形式也是目前最广泛采用的网络资源定位形式。当然,还有一种URN(统一资源名称)表示形式。
但总的来说,URN和URL都是URI的表现形式,也是URI的子集

2.资源多重表述

对于这个名词,可以从两个方面去理解:

  • 什么资源?
  • 多重表述是什么?

明白了问题,那么就来一一解答。
所谓资源,当然是指网络资源(数据、文字、图片等),那么网络资源在哪里?说大一点,那无非是进行网络通信的两端——客户端和服务器端。

那么多重表述呢?也可以从两个方面来看:

  • 什么是多重?
  • 表述又是什么意思?

这次我们倒着看,“表述”作为一个动词,必然需要宾语,那么这里所要被表述的自然是“资源”。所以,要对网络资源进行表述,一般来说都是通过某种特定格式的文件或数据。也就是说这里的表述,即将网络资源转换成某种特定格式的文件或数据
下来轮到“多重”了,所谓多重,必然对应着单重或单一,再看看它所修饰的是“表述”一词,也就是说资源单一表述是将网络资源转换成那种特定格式的文件或数据;那么,资源多重表述就是将网络资源转换成不同的特定格式的文件或数据。
那么这个“特定的”又是如何特定呢?
一般来说,都是根据通信某端对于数据格式的需求来定。
至此,再将所有的分析拼起来,资源多重表述,即
根据不同的需求,对于网络通信端的同一网络资源做出对应的格式转换。
例如:

GET /customers/1234 HTTP/1.1
Host: examplecom
Accept: application/vnd.mycompany.customer+xml

GET /customers/1234 HTTP/1.1
Host: example
com
Accept: text/x-vcard

3.无状态(stateless)通信

要理解无状态通信,首先要清楚什么是“状态”?
要注意的是,这里的状态不是网络通信里所说的类似HTTP状态码(200、404等)的状态(status),而是指RESTful架构中的state。该架构中的state分为两种:应用状态资源状态

  • 应用状态:指与某一特定请求相关的状态信息。
  • 资源状态:反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现。

无状态通信要求在网络通信过程中,任意一个Web请求必须与其他请求隔离,当请求端提出请求时,请求本身包含了响应端为响应这一请求所需的全部信息

由于无状态通信要求请求端要携带所有响应此请求需要的信息,所以与该请求相关的状态信息(应用状态)都应该被此请求所携带。

这就好像请求端是一个带着海鲜(应用状态)的顾客,他需要找一家海鲜加工的响应端餐厅(请求),餐厅中会自备一些料理通用的作料(资源状态)。最终,他找到一家响应端餐厅,将海鲜交给餐厅,餐厅用自己的作料加工海鲜(处理请求),并交给顾客享用(响应)。

所以,这里所谓的“无状态”通信就是指响应端不必存储请求端所需用来理解请求的信息的网络通信。

铺垫至此,也算把一些必要的概念理清了。那么下来,把这些概念集成一下,就可以得到REST的大概定义了。


REST

REST是一种软件架构风格(约束条件和原则的集合,但并不是标准)。
REST通过资源 的角度观察网络,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。

满足REST约束条件和原则的架构或接口,就被称为是RESTful架构或RESTful接口。


REST风格的优点

REST风格的优点基本来自于它的约束条件和原则。

例如,无状态通信可以使请求被分布式服务器的任意一台主机所响应,因此有利于服务器的负载均衡,从而改进性能。

又例如,资源多重表述是一种客户友好的方式,不会因为请求的文件格式发生变化而产生问题。

(其他几点优势还不是很理解...之后再加)


一些问题

  • 在“资源多重表述”特征的使用方式中,在百度上看到它的的另一种使用方式:

    将应用的Web UI纳入到Web API中——毕竟,API的设计通常是由UI可以提供的功能驱动的,而UI也是通过API执行动作的。将这两个任务合二为一带来了令人惊讶的好处,这使得使用者和调用程序都能得到更好的Web接口。--《百度百科》

    对于这种使用方式不是很理解,没有看出来这个方式是如何应用到资源多重表述的

  • 对于“无状态通信”特征中,所谓的应用状态,就是指与特定请求相关的状态信息。那么这种相关的状态信息具体是什么?这里因为还是不太理解,想不到具体的例子。

你可能感兴趣的:(初识 REST(Representational State Transfer))