表 现层状 态转换
要点 及标准
[编辑]- 资源
是 由 URI来 指定 。 - 对资
源 的 操作 包括 获取、创建、修 改 和 删除,这些操作 正 好 对应HTTP协议提供 的 GET、POST、PUT和 DELETE方法 。 通 过操作 资源的 表 现形式 来 操作 资源。- 资源
的 表 现形式 则是XML或 者 HTML,取 决于读者是 机 器 还是人 、是 消 费Web服 务的客 户软件 还是Web浏览器 。当然 也可以是任 何 其他的 格式 ,例 如JSON。
可 重 新 表 达的状 态迁移 的 特 征
[编辑]- Uniform Interface:统一
接 口 。- 以资
源 为基础每 个资源 都 可 以通过URI访问到。也就
是 一个个可以认知的资源,比 如文档,音 乐,视频等 信 息 ,都 可 以通过唯一 的 URI确定。 通 过重表 达的客 户端可 以管理 原 资源就是
我 们通过客户端可 以修改 原 资源的 状 态。返 回 信 息 足 够描述 自己 这样
重 表 达的客 户端可 以知道 如何 处理。超 媒体 是 应用状 态的引擎处理以超
媒体 为基础的状 态变化 。
- 以资
- Stateless:无状态。
- Cacheable:
可 缓存。 - Client-Server:
客 户服务器分 离模式 ,任 何 一个客户端与服务器都是可替换的。 - Layered System:
分 层的系 统,客 户端不知 道 他 联系的 是 不 是 最 终服务器。 - Code on Demand(
可 选):服 务器可 以将能力 扩展到 客 户端,如果客 户端可 以执行 的 话。这个功 能 是 可 选择的 。
REST架 构的限 制 条件
[编辑]REST
客 户端-服 务器(Client-Server)客 户端-服 务器结构限 制 的 目的 是 将 客 户端和服 务器端 的 关注点 分 离。将 用 户界面 所 关注的 逻辑和 数 据 存 储所关注的 逻辑分 离开来 有 助 于提高 用 户界面 的 跨 平台 的 可 移植 性 。通 过简化 服 务器模 块也有 助 于服务器模 块的可 扩展性 。
- 无状态(Stateless)
服 务器不能 保存 客 户端的 信 息 ;每 一次从客户端发送的请求中,要 包含 所有 的 必须的 状 态信息 ,会 话信息 由 客 户端保存 ,服 务器端 根 据 这些状 态信息 来 处理请求。服 务器可 以将会 话状态信息 传递给其他 服 务,比 如数据 库服务,这样可 以保持 一段时间的状态信息,从而实现认证功 能 。当 客 户端可 以切换到一个新状态的时候发送请求信息。当 一个或者多个请求被发送之后,客 户端就处于一个状态变迁过程中。每 一 个应用 的 状 态描述 可 以被客 户端用 来 初 始 化 下 一次的状态变迁。
- 缓存(Cacheability)
- 如同
万 维网一 样,客 户端和 中 间的通 讯传递者可 以将回 覆 缓存起 来 。回 覆 必须明 确的或 者 间接的 表明 本身 是 否 可 以进行 缓存,这可以预防 客 户端在 将来 进行请求的 时候得 到 陈旧的 或 者 不 恰当的 数 据 。管理 良好 的 缓存机 制 可 以减少 客 户端-服 务器之 间的交互 ,甚至完全 避免客 户端-服 务器交互 ,这进一步提了高性能和可扩展性。
- 如同
- 统一
接 口 (Uniform Interface)- 這是 RESTful
系 统设计的基本 出 发点。它简化 了 系 统架构,减少了 耦合性 ,可 以让所有 模 块各自 独立 的 进行改 进。包括 下 列 四 个限制 :- 请求
中 包含 资源的 ID(Resource identification in requests)请求
中 包含 了 各 种独立 资源的 标识,例 如,在 Web服 务中的 URI。资源本身 和 发送给客户端的 标识是 独立 。例 如,服 务器可 以将自身 的 数 据 库信息 以HTML、XML或 者 JSON的 方式 发送给客户端,但 是 这些可 能都 不 是 服 务器的 内部 记录方式 。 - 资源
通 过标识来操作 (Resource manipulation through representations)当 客 户端拥有一个资源的标识,包括 附 带的元 数 据 ,则它就有足 够的信 息 来 删除这个资源。 消息 的 自我 描述性 (Self-descriptive messages)每 一个消息都包含足够的信息来描述如何来处理这个信息.例 如,媒体 类型 (media-type) 就可以确定 需要 什么样的分析 器 来 分析 媒体 数 据 .用 超 媒体 驱动应用状 态(Hypermedia as the engine of application state (HATEOAS))同 用 户访问Web服 务器的 Home页面相似 ,当 一 个 REST客 户端访问了 最初 的 REST应用的 URI之 后 ,REST客 户端应该可 以使用 服 务器端 提供 的 链接,动态的 发现所有 的 可用 的 资源和 可 执行的 操作 。随 着 访问的 进行,服 务器在 响应中 提供 文字 超 链接,以便客 户端可 以得到 当 前 可用 的 操作 。客 户端无需用 确定的 编码的 方式 记录下 服 务器端 所 提供 的 动态应用的 结构信 息 。
- 请求
- 這是 RESTful
分 层系统(Layered System)客 户端一般不知道是否直接连接到了最终的服务器,或 者 是 路 径 上 的中 间服务器。中 间服务器可 以通过负载均衡 和 共 享 缓存的 机 制 提 高 系 统的可 扩展性 ,这样可也 便 于安全 策略 的 部署 。
- 按需
代 码(Code-On-Demand,可 选)服 务器可 以通过发送 可 执行代 码给客 户端的 方式 临时性 的 扩展功 能 或 者 定 制 功 能 ,例 如Java Applet、Flash或 JavaScript。
关于状 态
[编辑]应该
應用 於Web服務
[编辑]直 观简短 的 资源地 址 :URI,比 如:http://example.com/resources
。- 传输
的 资源:Web服 务接受与返 回 的 互联网媒体 类型,比 如:JSON,XML,YAML等 。 - 对资
源 的 操作 :Web服 务在该资源 上所 支持 的 一 系列 请求方法 (比 如:POST,GET,PUT或 DELETE)。
资源 | GET | PUT | POST | DELETE |
---|---|---|---|---|
https://example.com/resources
|
删除 | |||
单个资源https://example.com/resources/142
|
获取 |
删除 |
PUT
实现举例
[编辑]列 举所有 商品 :GET http://www.store.com/products
呈 現 某 一 件 商品 :GET http://www.store.com/products/12345
下 单购买:POST http://www.store.com/orders <purchase-order> <item> ... </item> </purchase-order>
REST的 优点
[编辑]可 更 高 效 利用 缓存来 提 高 响应速度 通 讯本身 的 无状态性可 以让不同 的 服 务器的 处理一系列请求中的不同请求,提 高 服 务器的 扩展性 - 浏览
器 即 可 作 为客户端,简化软件需求 相 对于其他叠加在 HTTP协议之 上 的 机 制 ,REST的 软件依 赖性更 小 不 需要 额外的 资源发现机 制 在 软件技 术演进中的 长期的 兼 容 性 更 好
实现
[编辑]- Ruby on Rails1.2以后
的 版本 支持 REST model (页面存 档备份,存 于互联网档案 馆)。 - JBoss RESTEasyJBoss
的 REST实现 - Node.js RESTful APINode.js
實現 RESTful API - Learn REST: A RESTful Tutorial (页面
存 档备份,存 于互联网档案 馆)
参考 文献
[编辑]引用
[编辑]- ^ Fielding, Roy Thomas. Chapter 5: Representational State Transfer (REST). Architectural Styles and the Design of Network-based Software Architectures (
学位 论文). University of California, Irvine. 2000 [2016-12-29]. (原始 内容 存 档于2021-05-13).This chapter introduced the Representational State Transfer (REST) architectural style for distributed hypermedia systems. REST provides a set of architectural constraints that, when applied as a whole, emphasizes scalability of component interactions, generality of interfaces, independent deployment of components, and intermediary components to reduce interaction latency, enforce security, and encapsulate legacy systems.
- ^
理解 RESTful. [2016-03-18]. (原始 内容 存 档于2018-11-02). - ^ Richardson, Leonard; Ruby, Sam, RESTful Web Services, O'Reilly, 2007(May 8, 2007), ISBN 0596529260
- ^ Elkstein, M. What is REST? (页面
存 档备份,存 于互联网档案 馆). Retrieved on 2009-07-04.
来 源
[编辑]- Roy Thomas Fielding
的 博士 论文“Architectural Styles and the Design of Network-based Software Architectures(页面存 档备份,存 于互联网档案 馆)” - Paul Prescod.
第 二 代 web服 务
|