此为个人学习笔记,内容可能有些混乱,仅供参考。
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 方法。