概念——表征状态转移(Representational State Transfer,REST)

本文内容

  • 宗旨
  • 要点
  • 示例
  • 优点
  • 参考

 

表征状态转移(Representational State Transfer,REST)是 Roy Fielding 在 2000 年他的博士论文中提出来的一种软件架构风格。

目前的三种主流 Web 服务实现方式——远程过程调用(RPC),面向服务架构(SOA)以及表述性状态转移(REST),REST 方式与复杂的 SOAP 和 XML-RPC 比起来更加简洁,越来越多的 Web 服务开始采用 REST 风格设计和实现。例如,Amazon.com 提供接近 REST 风格的 Web 服务进行图书查找;雅虎提供的 Web 服务也是 REST 风格的。

远程过程调用(RPC)

远程过程调用为 Web 服务提供一个分布式函数/方法接口供用户调用。这是一种较传统的方式。通常,在 WSDL 中对 RPC 接口进行定义(类似于早期的XML-RPC)。本质上,RPC 方式利用一个简单映射,把用户请求直接转化成一个特定语言编写的函数/方法。现在,该方式已不再使用。

面向服务架构(SOA)

面向服务架构现在,业界比较关注的是遵从面向服务架构(Service-oriented architecture,SOA)来构建 Web 服务。该方式中,通讯是由消息驱动,而不再是某个动作(方法调用)。这种 Web 服务也称为“面向消息的服务”。

 

宗旨


表征状态转移(Representational State Transfer)从资源角度来观察整个网络,资源由通用资源标志符(Uniform Resource Identifier,URI)确定,客户端应用通过 URI 获取资源的表征,这些表征会使应用程序转变其状态。随着不断地获得资源表征,客户端应用也不断地转变其状态,这就是 REST。

这个观点不是凭空想出来的,而是通过观察当前 Web 互联网的运行方式抽象出来的。Roy Fielding 认为“ 设计良好的网络应用表现为一系列的网页,网页可以看作是虚拟状态机,用户选择链接将使网页传输到客户端,并展现给用户,而这会导致状态的转变。”

 

要点


REST 是种设计风格,而不是个标准。REST 通常是基于 HTTP、URI 以及 HTML 和 XML,这些目前的广泛使用的协议和标准。

  • 资源由 URI 指定。
  • 对资源的操作,包括获取、修改、创建和删除,这些操作对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式是 HTML/XML,也可以是其他格式。
REST 要求
  • 客户端和服务器结构
  • 连接协议具有无状态性
  • 能够利用 Cache 机制提高性能
  • 层次化的系统
  • Javascript(可选)
RESTful Web 服务

RESTful Web 服务(RESTful Web API)是一个使用 HTTP 协议,并遵循 REST 原则的 Web 服务。它从三个方面对资源进行定义:

  • URI,如 http://example.com/resources/
  • RESTful Web 服务可以接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等
  • RESTful Web 服务支持的一系列请求方法,包括 POST、GET、PUT 或 DELETE

该表列出了在实现 RESTful Web 服务时 HTTP 请求方法的典型用途。如下表所示:

HTTP 请求方法在 RESTful Web 服务中的典型应用

资源 GET PUT POST DELETE
一组资源的 URI,
如 http://example.com/resources/ 
列出 URI 和该资源组中每个资源的详细信息 用给定一组资源替换当前整组资源 在本组资源中创建/追加一个新资源。
该操作往往返回新资源的 URL。
删除整组资源
单个资源的 URI,
如 http://example.com/resources/142   
获取指定资源的详细信息,格式可以 XML、JSON 等 替换/创建指定资源,并将其追加到相应的资源组中 把指定资源当做一个资源组,并在其下创建/追加一个新资源 删除指定资源

不像基于 SOAP 的 Web 服务,RESTful Web 服务并没有的“正式”标准。 因为 REST 是一种架构,而 SOAP 只是一个协议。虽然 REST 不是一个标准,但在实现 RESTful Web 服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。

 

示例


如一个简单的网络商店应用。如下所示列举所有商品:

GET http://www.store.com/products

如下所示具体某一件商品:

GET http://www.store.com/product/12345

如下所示下单购买:

POST http://www.store.com/order
<purchase-order>
  <item> ... item>
purchase-order>
 

 

REST 优点


  • 利用缓存 Cache 提高响应速度
  • 无状态性使不同服务器处理一系列请求,提高服务器扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在 HTTP 协议之上的机制,REST 软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中兼容性更好

 

参考


  • Roy Fielding 博士论文 "Architectural Styles and the Design of Network-based Software Architectures"

你可能感兴趣的:(概念——表征状态转移(Representational State Transfer,REST))