REST这个术语,是Roy Fielding 在Ph.D.论文中提出来的,它的全称是“Representational State Transfer.”REST描述了这么一个架构:利用标准的http 协议中的 get, post, put,delete 来请求和操作网络上的资源。
在REST中,资源的意思就是一个基于URL实体,客户端可以通过 http协议来和它进行交互。这个资源可以用各种形式来展示给客户端,如 HTML,XML,RSS,主要依赖于客户端的调用方式。并不像以往的Rails开发那样,用REST方式,一个 url 不是指定一个 model 或者 action, 一个 url 仅仅是资源的本身而已。
REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。
REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和Delete方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和Delete这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
REST的设计准则
REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。
REST提出了如下设计准则:
·网络上的所有事物都被抽象为资源(resource);
·每个资源对应一个唯一的资源标识符(resource identifier);
·通过通用的连接器接口(generic connector interface)对资源进行操作;
·对资源的各种操作不会改变资源标识符;
·所有的操作都是无状态的(stateless);
使用REST架构
对于开发人员来说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式:通过URL来设计系统结构。REST是一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。REST有很多成功的使用案例,著名的Delicious和Flickr都提供基于REST风格的API使用,客户端调用也极其方便,参考第四章基于JAX-RS的具体实现,从中可以看出REST是多么的简单易用。