1、“无状态服务器”约束

REST 的 “客户机-无状态-服务器” 约束禁止在服务器上保存会话状态。符合这一约束进行设计可以提高系统的可见性、可靠性和可伸缩性。

当浏览器浏览访问一个url资源时,返回的页面即为该url资源的representation,这个representation给浏览器一个state,当 
浏览器访问下一个url资源时,浏览器的state就transfer了。

2、REST 与全堆栈 Web 服务根本不同

· REST 的核心抽象是远程资源而不是远程过程调用。

· REST 没有发明一个详尽的标准列表,而是采用现有的 Internet 标准,包括 HTTP、XML 和 TCP/IP。

· REST 没有覆盖每个可能场景,而是覆盖了最常见的问题。

3、REST 客户使用与浏览器相同的 HTTP 命令访问资源。当 REST 客户访问到资源的表示时,客户转换到一个状态。使用不同的 HTTP 命令,REST 客户可以创建(post)、读取(get)、更新(put)或删除(delete)资源的记录。

REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

4、REST 可以:

· 用 TCP/IP 命名标准命名 Web 上的资源

· 用 HTTP 查询和操纵这些资源

· 使用基于文本的标准消息格式(例如 XML 或 HTML)来构造数据

5、 REST的设计准则

  REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:

  网络上的所有事物都被抽象为资源(resource);

  每个资源对应一个唯一的资源标识符(resource identifier);

  通过通用的连接器接口(generic connector interface)对资源进行操作;

  对资源的各种操作不会改变资源标识符;

所有的操作都是无状态的(stateless)。

HTTP 协议从本质上说是一种无状态的协议,客户端发出的 HTTP 请求之间可以相互隔离,不存在相互的状态依赖。基于 HTTP 的 ROA,以非常自然的方式来实现无状态服务请求处理逻辑。对于分布式的应用而言,任意给定的两个服务请求 Request 1 与 Request 2, 由于它们之间并没有相互之间的状态依赖,就不需要对它们进行相互协作处理,其结果是:Request 1 与 Request 2 可以在任何的服务器上执行,这样的应用很容易在服务器端支持负载平衡 (load-balance)。

REST 的应用可以充分地挖掘HTTP 协议对缓存支持的能力。

6、使用REST架构

REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式:通过URL来设计系统结构。REST是一套简单的设计原则、 一种架构风格(或模式),不是一种具体的标准或架构。

7、与soap对比

典型的基于 SOAP 的 Web 服务以操作为中心,每个操作接受 XML 文档作为输入,提供 XML 文档作为输出。在本质上讲,它们是 RPC 风格的。而在遵循 REST 原则的 ROA 应用中,服务是以资源为中心的,对每个资源的操作都是标准化的 HTTP 方法。