2014年3月2日星期日

[]RESTful架构的设计风格和规范 | 弯柚博客

本文自动转发自我的博客: http://www.haofengjing.org/?p=1607

前面提到了REST不是一个标准,也不是一个协议,REST是指一种软件设计风格,这种风格结构清晰、符合标准、易于理解、扩展方便,既然是一种风格,所以所有采用这种风格的互联网软件架构,我们即称之为RESTful架构。refer:RESTful架构的基本介绍 这种风格究竟是什么呢?要实现这种风格必须满足一组架构约束条件和原则,只有完全满足或满足了下面的大部分这些约束条件,我们才能称之为RESTful

为所有资源分配URI

每个资源都应该是可标识的,都应该拥有一个明显的ID——在Web中,代表ID的统一概念是:URI。URI构成了一个全局命名空间,使用URI标识你的关键资源意味着它们获得了一个唯一、全局的ID。 这个很好理解,我前面已经描述过了。 但是在为资源分配URI的时候,一定要注意一些规则,URI应当只包含名词,这样才能更加确切的描述一个资源,比如下面:

http://www.ourunix.org/post 描述一组资源

http://www.ourunix.org/post/32

描述一单个资源

另外,如果我们使用带有参数的post请求,请注意将其参数存放在Header中,而不是直接表现在URL上。

使用标准方法

使用HTTP的标准方法,这些方法包括GET、POST、PUT、DELETE甚至还可能包括HEAD和OPTIONS等,一个资源应该包括这些方法,抽开业务逻辑层,这些方法其实就是对应持久层中数据库的基本方法:

GET对应数据库的SELECT PUT对应数据库的UPDATE POST对应数据库的INSERT DELETE对应数据库的DELETE

有了HTTP的方法,我们已经完全满足了对一个资源的所有操作能力,所以我们在逻辑上处理一个HTTP方法时,可以在持久层实现该方法的真正请求。

无状态表述

应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。 上面这句是维基上的解释,可能有点术语话,不太好理解,这句话其实是说,REST要求状态要么被放入资源状态中,要么保存在客户端上,即每一次客户端发出新的请求,都必须包含理解请求所必需的信息,而不是通过服务器去保留所有请求的状态。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。

使用超链接

使用超链接,是指可以将需要的、相关的资源互相关联起来,俗话就是使用超链接描述,客户端在获得一个资源之后,可以检索与之相关的资源。

利用cache机制

使用某种方式实现cache机制来增进性能。

层次化系统

层次化系统,我的理解是在web开发中,架构上分多层次结构,比如MVC,使用层次化的好处可以让REST设计专设专用,从而简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。


没有评论:

发表评论