随着时代的发展,越来越多的企业开始强行规定,所有的接口都只能使用HTTP POST的类Json-RPC风格的请求,而不允许使用其它的请求,如GET、PUT、DELETE。而另外的一些人则认为这种规定的出现是违背了业界最佳实践的,是过于迁就低水平的程序员的表现。

事实上,很多入行很久的程序员甚至都没有使用过PUT和DELETE,更别说PATCH和OPTIONS了。甚至一些防火墙压根就屏蔽了PUT和DELETE命令。这对于一个协议标准指令而言,无疑是令人费解的。

而同是标准指令,使得尝试利用HTTP协议的大部分方法的RESTful架构风格也略显尴尬了起来。

那么产生这一问题的原因是什么呢?因为随着时间的推移,互联网应用的场景已经发生了变化。REST风格的编程场景,对于解释当前互联网世界的一切,已经越来越力不从心了。

REST架构风格产生于2000年,HTTP协议的主要设计者Roy Thomas Fielding博士在他的博士论文中提出了REST(Representational State Transfer,表现层状态转化)这一概念。

在 REST 架构原则看来,网络上的每个具体信息都是一个实体,也就是资源;资源可以是一个文本、一段文字、一张图片、一种服务,总之就是一个具体的实体。我们用一个 URI (唯一资源标示符)来唯一指向特定的某个资源。在使用时,我们应保证 uri 具有良好的可读性和标示性。

REST架构一个鲜明的特点是,对互联网的理解建立在资源的交互上面。在REST的眼里,所有的互联网行为都可以表现为资源的状态改变。

而从REST架构风格诞生至今的20多年来,我们的互联网世界已经发生了很大的变化。很多人已经隐隐约约的感觉到了,坚持用REST思想来强行解释我们对于当前互联网的很多行为,很困难。

那么产生这种困难的原因是什么呢?因为状态变化这一描述角度已经无法解释我们的互联网行为了。

举个简单的例子,对于两个普通人而言,一个人只有苹果,另一个人只有桔子。那么,可以用,有苹果那个人,和有桔子那个人来标识这两个人。也可以说去有苹果的那个人那边拿个苹果,去有桔子的那个人那里拿个桔子。

但是,当百货商场出现之后。去卖桔子或者买苹果这种所有的行为,就可以简化为一句,逛商场。而具体的指令则体现在给售货员发布的购买清单上面。

具体到REST的视角上面,就是原来有很多个不同的资源,我们去与不同的资源交换状态。而现在,只有一个API,我们对于网络的任何操作都是在给这个API发指令。这事实上就是很多框架在做的事。我们虽然可以将这个API认为是一个资源,但是这个API所具有的状态,已经远远超过了一个资源所应具有的状态。而且,这种状态的变化对于这个资源而言,是毫无意义的。

或者换句话说,REST架构风格更偏向于对于静态资源的描述上,对于API的设想,也是输入一些简单的指令,或者确认的结果。而如今的互联网,则几乎没有什么是静态资源。即使是加载的一张图片,也很可能来自于一系列复杂的指令。

与REST架构产生的2000年相比,我们的互联网经历了Web 1.0到3.0的快速发展。

Web 1.0的时代的互联网是一个“物”,人们对其的理解是标签与寻找,即给出明确的位置,获得可预见的资源,这也是REST架构构建的基础。

具体到技术上,是人们想法找到资源,去查阅与使用。

而Web 2.0时代的互联网已经是一个“人”了,人们与其交流的方式是沟通与交互,即给出明确的指令,获得可预见的服务。

具体到技术上,是人们知道资源就在互联网那里,给出指令说我希望要什么。

这里面最大的区别是,一个人能带来的服务,比一个物能带来的资源多得多。

而Web 3.0时代的互联网,已经是一个“社会”了,人们与其交流的方式,是接受与反馈。无论你是否找它,它都在你的身边,默默观察着你的一切。

具体到技术上,是互联网知道你就在那里,想要什么,把资源推到你的手上。

打开网易新闻 查看精彩图片

喜欢本文的话,欢迎关注活在信息时代哦:)