关于   小悟志   栏目   标签   文章   归档   友链

   云上小悟  +  

当前位置 : 首页 » InfoTech » 彻底理解REST设计思想 正文

彻底理解REST设计思想

InfoTech / by: 麦新杰 / 发布:2017年8月10日 / 8次阅读 / 暂无评论
/ 最后修改时间: 2017-08-10 16:08:37

InfoTech / 2017年8月10日 / 8次阅读 /

拍拍贷
featured image

REST这个词现在经常看到,它是REpresentational State Transfer的直接翻译,即表征状态转移,我去,这个翻译简直不是人可以看懂的。好几次麦新杰鼓起勇气寄出时间来学习REST,都被这个中文翻译吓跑了。这篇博文,争取让我能够彻底明白REST到底是什么鬼。

 

到底什么是REST

刚才说了,REST是REpresentational State Transfer的直接翻译,好了,就到此,不要再把字面对应的中文写出来了。那么,这几个英文单词应该如何理解呢?

REpresentational State Transfer前面少了一个词,Resource。连起来就是resource REpresentational State Transfer,资源表现状态转移。资源是什么?REST应用在Web服务的API设计上,资源,对应的就是各种通过网络传递的数据。资源表征,就是各种数据的格式,或者说数据的表现形式,比如JSON,XML等。状态转移,State Transfer,其实不要翻译成中文,一翻译就很难理解了。State Transfer表示,符合REST风格的Web API(也称为RESTful API),提供API的服务器是Stateless,即无状态的,但是服务器会将状态转移的接口,在其它接口被调用的时候,发送给客户端,让客户端之后如果想进行一次状态转移,应该调用那个接口。(有点像WordPress系统生产的网页的head部分,里面含有博文的前一篇和后一篇的link,而HTTP协议就是无状态的协议)

简单说,REST就是一种Web Servie(通过Web的方式提供一组API来提供服务,下文也写作Web API)的设计思想。

越来越多的人开始意识到,网站即软件,而且是一种新型的软件,这种网站软件的接口,就是Web API,符合REST风格的Web API,就是RESTful API。

 

WiKi百科对REST的定义

Representational State Transfer (REST) is a software architecture style consisting of guidelines and best practices for creating scalable web services. REST is a coordinated set of constraints applied to the design of components in a distributed hypermedia system that can lead to a more performant and maintainable architecture.

对于Web服务来说,REST非常重要。这段英文有个词,hypermedia system,说的就是现在的Web。

关于hypermedia的理解,请参考:对Hypertext和Hypermedia的理解

 

REST的起源

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。

Roy Thomas Fielding

Roy Thomas Fielding

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。如果一个架构符合REST原则,就称它为RESTful架构。要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计。

 

为什么互联网时代,要使用REST架构

大家都知道"古代"网页是前端后端融在一起的,比如之前的PHP,JSP等。在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。在RESTful架构下:

REST架构

REST架构

WordPress系统采用PHP,如果不考虑其支持的REST API,这个系统就是属于前端后端融合在一起的,服务器发给浏览器的是一个HTML文件,里面也同时包含了解析渲染此HTML文件的所有信息。

有些平台需要的仅仅是数据本身,最多有点结构信息;有些数据在不同客户端需要完全不同的渲染方式,难以在服务器端通过统一的编码实现。REST架构的一个特点,就是将数据(或数据结构)和数据渲染展示分开,获取数据的接口统一,不同客户端的展现分离。

目前主要使用HTTP协议(就是REST思想提出者Roy Thomas Fielding设计的)来实现REST思想,网络上有人从实践的角度,一句话总结REST:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

 

举个例子来解释REST

例如我订阅了一个人的博客,想要获取他发表的所有文章(这里『他发表的所有文章』就是一个资源Resource)。

于是我就向他的服务发出请求,说『我要获取你发表的所有文章,最好是atom格式的』,这时候服务器向你返回了atom格式的文章列表第一页(这里『atom格式的文章列表』就是表征Representation)。

你看到了第一页的页尾,想要看第二页,这时候有趣的事情就来了。如果服务器记录了应用的状态(stateful),那么你只要向服务询问『我要看下一页』,那么服务器自然就会返回第二页。类似的,如果你当前在第二页,想服务器请求『我要看下一页』,那就会得到第三页。但是REST的服务器恰恰是无状态的(stateless),服务器并没有保持你当前处于第几页,也就无法响应『下一页』这种具有状态性质的请求。因此客户端需要去维护当前应用的状态(application state),也就是『如何获取下一页资源』。当然,『下一页资源』的业务逻辑必然是由服务端来提供。服务器在文章列表的atom表征中加入一个URI超链接,指向下一页文章列表对应的资源。客户端就可以使用统一接口的方式,从这个URI中获取到他想要的下一页文章列表资源。上面的『能够进入下一页』就是应用的状态(State)。服务器把『能够进入下一页』这个状态以atom表征形式传输(Transfer)给客户端就是表征状态传输(REpresentational State Transfer)这个概念。

 

REST的设计约束(麦新杰理解就是REST的Best Practice)

1, 客户端服务器,Client-Server

客户端和服务器分离,分别演进。

2, 无状态,Stateless

简化REST接口实现。来自客户的每一个请求必须包含服务器处理该请求所需的所有信息。

3, 缓存,Cache

考虑在可以缓存的地方实施缓存,加快系统速度。

4, 层次化,Layed

软件系统都是层次化的,甚至可以说IT系统都是层次化的。

允许服务器和客户之间存在中间层(代理或网关等),用来代替服务器对客户的请求进行回应,而且这些不需要客户端知道,或做特别处理。

5, 统一接口,Unified Interface

简化接口设计和使用。

推荐阅读:RESTful API设计指南

6, 按需提供代码,Code-on-Demand(Optional)

服务器可以提供一些代码或者脚本(比如Javascript)并在客户的运行环境中执行。这条准则是这些准则中唯一不必必须满足的一条(比如客户可以在客户端下载脚本生成密码访问服务器)。

按照以上实现的Web API,就算是RESTful API(或RESTful Web Service)。

 

到此,麦新杰已经彻底搞懂什么是REST了,各位同学,GOOD LUCK。

在REST这么流行之前,还有一些概念都与Web Service有关,比如ROA(Resource Oriented Architecture),SOA(Service Oriented Architecture)。REST其实就是一个ROA架构的服务。SOA架构通常采用RPC(Remote Procedure Call)来实现,RPC曾经是开发Web Service的主流,最初是XML-RPC协议,后被SOAP协议取代。而现在是RESTful架构取代RPC架构,成为Web Service开发的主导

-- (*^-^*) --

本文链接:http://www.maixj.net/ict/rest-16161
云上小悟 麦新杰(QQ:1093023102)

《彻底理解REST设计思想》暂无评论

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有  备案号:苏ICP备14045477号-1  economists.cn的备案号:苏ICP备14045477号-3  
    联系我们

云上小悟,麦新杰的独立博客
网站二维码
拍拍贷
go to top