理解RESTful架构

ps:只是截取了一些感觉比较好的自己不知道的东西拿出来分享,并非原创

Web的技术架构包括了四个基石:

URI
HTTP
HyperText(除了HTML外,也可以是带有超链接的XML或JSON)
MIME

web开发技术发展的几个阶段:

静态内容阶段:

在这个最初的阶段,使用Web的主要是一些研究机构。Web由大量的静态HTML文档组成,其中大多是一些学术论文。Web服务器可以被看作是支持超文本的共享文件服务器。

CGI程序阶段:

在这个阶段,Web服务器增加了一些编程API。通过这些API编写的应用程序,可以向客户端提供一些动态变化的内容。Web服务器与应用程序之间的通信,通过CGI(Common Gateway Interface)协议完成,应用程序被称作CGI程序。

脚本语言阶段:

在这个阶段,服务器端出现了ASP、PHP、JSP、ColdFusion等支持session的脚本语言技术,浏览器端出现了Java Applet、JavaScript等技术。使用这些技术,可以提供更加丰富的动态内容。

瘦客户端应用阶段:

在这个阶段,在服务器端出现了独立于Web服务器的应用服务器。同时出现了Web MVC开发模式,各种Web MVC开发框架逐渐流行,并且占据了统治地位。基于这些框架开发的Web应用,通常都是瘦客户端应用,因为它们是在服务器端生成全部的动态内容。

RIA应用阶段:

在这个阶段,出现了多种RIA(Rich Internet Application)技术,大幅改善了Web应用的用户体验。应用最为广泛的RIA技术是DHTML+Ajax。Ajax技术支持在不刷新页面的情况下动态更新页面中的局部内容。同时诞生了大量的Web前端DHTML开发库,例如Prototype、Dojo、ExtJS、jQuery/jQuery UI等等,很多开发库都支持单页面应用(Single Page Application)的开发。其他的RIA技术还有Adobe公司的Flex、微软公司的Silverlight、Sun公司的JavaFX(现在为Oracle公司所有)等等。

移动Web应用阶段:

在这个阶段,出现了大量面向移动设备的Web应用开发技术。除了Android、iOS、Windows Phone等操作系统平台原生的开发技术之外,基于HTML5的开发技术也变得非常流行。

REST架构风格最重要的架构约束有6个:

客户-服务器(Client-Server)

通信只能由客户端单方面发起,表现为请求-响应的形式。

无状态(Stateless)

通信的会话状态(Session State)应该全部由客户端负责维护。

缓存(Cache)

响应内容可以在通信链的某处被缓存,以改善网络效率。

统一接口(Uniform Interface)

通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。

分层系统(Layered System)

通过限制组件的行为(即,每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。

按需代码(Code-On-Demand,可选)

支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。

什么是资源?

资源是看待服务器的方式,即将服务器看做是由很多离散的资源组成,个资源在服务器上是一个可命名的抽象概念。可以是一张数据库中的表,也可以是一个文件,资源以名词为核心来组织,URI是资源的名称也是资源在web上的地址。

什么是资源的表述?

资源的表述是一段对于资源在某个特定的时刻的状态的描述。可以再客户端-服务器之间转移。其表现形式有很多种格式,一般都是通过协商机制来确定,请求-响应方向的表述通常更使用不同的格式,如html/xml/json/纯文本/图片等。

什么是状态转移?

状态转移与状态机中的状态转移的含义是不一样的,这里指的是客户端与服务器之间转移代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。

什么是统一接口?

REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。另外,对于资源执行的操作,其操作语义必须由 HTTP消息体之前的部分完全表达,不能将操作语义封装在HTTP消息内部。这样做是为了提高交互的可见性,以便于通信链的中间组件实现缓存,安全审计等等功能。

什么是超文本驱动?

(HATEOAS)“超文本驱动”又名“将超媒体作为应用状态的引擎”,将web应用看做是一个由很多状态组成的有限状态机,资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行状态的迁移,在超媒体之中不仅仅包含数据,还包含了状态迁移的语义。以超媒体作为引擎,驱动Web应用的状态迁移。通过超媒体暴露出服务器所提供的资源,服务器提供了哪些资源是在运行时通过解析超媒体发现的,而不是事先定义的。从面向服务的角度看,超媒体定义了服务器所提供服务的协议。客户端应该依赖的是超媒体的状态迁移语义,而不应该对于是否存在某个URI或URI的某种特殊构造方式作出假设。一切都有可能变化,只有超媒体的状态迁移语义能够长期保持稳定。

这6个特征是REST架构设计优秀程度的判断标准

面向资源(Resource Oriented)
可寻址(Addressability)
连通性(Connectedness)
无状态(Statelessness)
统一接口(Uniform Interface)
超文本驱动(Hypertext Driven)

这6个特征是REST架构设计优秀程度的判断标准。其中,面向资源是REST最明显的特征,即,REST架构设计是以资源抽象为核心展开的。可寻址说的是:每一个资源在Web之上都有自己的地址。连通性说的是:应该尽量避免设计孤立的资源,除了设计资源本身,还需要设计资源之间的关联关系,并且通过超链接将资源关联起来。无状态、统一接口是REST的两种架构约束,超文本驱动是REST的一个关键词,在前面都已经解释过,就不再赘述了。

友情链接:

理解RESTful架构
理解本真的RESTful架构风格

你可能感兴趣的:(理解RESTful架构)