RESTful

Roy Fielding 的论文 REST

http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

 

 

REST 概述

首先简要介绍一下 REST。REST 代表 Representational State Transfer,它是 World Wide Web 所依赖的一套架构原则。Roy Fielding 在他的博士论文 “Architectural Styles and the Design of Network-based Software Architectures” 中首次提出了这个概念。在他的论文中,Fielding 明确指出 REST 和 World Wide Web 的五个架构原则:

  • 可寻址性(Addressability)。REST 中的所有东西都基于资源 的概念。资源与 OOP 中的对象或其他名词不同,它是一种抽象,必须可以通过 URI 寻址或访问。
  • 接口一致性(Interface uniformity)。与 SOAP 或其他标准不同,REST 要求用来操纵资源的方法或动词不是任意的。这意味着 RESTful 服务的开发人员只能使用 HTTP 支持的方法,比如 GETPUTPOSTDELETE 等等。因此不需要使用 WSDL 等服务描述语言。
  • 无状态(Statelessness)。为了增强可伸缩性,服务器端不存储客户机的状态信息。这使服务器不与特定的客户机相绑定,负载平衡变得简单多了。这还让服务器更容易监视、更可靠。
  • 具象(Representational)。客户机总是与资源的某种具象交互,绝不会直接与资源本身交互。同一资源还可以有多个具象。理论上说,持有资源的具象的任何客户机应该有操纵底层资源的足够信息。
  • 连通性(Connectedness)。任何基于 REST 的系统都应该预见到客户机需要访问相关的资源,应该在返回的资源具象中包含这些资源。例如,可以以超链接的形式包含特定 RESTful 服务的操作序列中的相关步骤,让客户机可以根据需要访问它们。

JAX-RS

 

为什么需要另一个 Java 标准?定义 JAX-RS 这个新规范是为了简化基于 REST 的 Java 开发。它主要关注使用 Java 注释和普通旧式 Java 对象 (POJO) 实现 RESTful 服务。尽管总是可以使用 servlet 实现 RESTful 服务,但是以这种方式实现业务逻辑需要太多 HTTP GET 请求。

JAX-RS 隐藏所有 HTTP 并把 servlet 绑定到 Java 类中的各个方法。注释还可以动态地提取 HTTP 请求中的信息,以及把应用程序生成的异常映射到 HTTP 响应码。由于这些原因,JAX-RS 是一种实现 RESTful Java Web 服务的有效方法。

Web 上的 REST

以下站点当前正在使用 REST:

  • Atom Publishing Protocol。Atom 是 REST 协议最正规的实现之一,广泛用于博客发布领域。
  • Sun 的 Cloud API。这是 Sun 的 RESTful API,用于管理和创建计算、连网和存储元素等云资源。
  • Digg 的 API。Digg 是一个流行的社交网站,它使用 RESTful API 让用户和合作伙伴能够以编程方式与站点和数据交互。
  • Netflix API。Netflix 是一个 DVD 出租网站,它使用 RESTful API 提供对影片目录的细粒度访问,以及以编程方式调整用户队列和获取影片推荐。
  • Flickr API。Flickr 是一个照片上传网站,用户可以使用它提供的 RESTful API 上传、更换和搜索照片和像册。

Project Jersey、JBoss RESTEasy 和 Restlet Framework、Apache Wink 比较

 

功能比较

那么,应该使用那些主要领域来比较这些不同的 JAX-RS 实现呢?针对本文的目的,我主要关注 5 个重要领域。显然,可以通过更多的特性来比较这些 JAX-RS 实现,但下面 5 个特性是进行快速、简便、高效的、基于 REST 的生产质量服务开发和测试的关键特性:

  • 嵌入式容器。多数 JAX-RS 实现都可以部署在一个 servlet 容器中,但有时需要在一个不基于 servlet 的简单 Java 应用程序中以一种嵌入式方式运行基于 REST 的服务。确保知道哪些实现支持使用嵌入式容器。
  • 客户端 API。JAX-RS 定义了复杂的服务器绑定规范,但规定由实现框架来负责定义客户端绑定和 APIs。因此,客户端架构和框架是选择 JAX-RS 实现的一个关键属性。
  • 侦听器框架。基于 REST 的 Web 服务开发人员经常需要以一种非侵入方式对 HTTP 调用进行预先处理和事后处理。这些调用对日志记录、缓存设置和安全验证等操作很有用。确定您的框架提供的、用于处理 HTTP 侦听的机制。
  • 数据格式支持。通过使用 MessageBodyReaderMessageBodyWriter 提供程序,JAX-RS 允许轻松添加对任意数据类型的支持。确定常用格式(包括 Atom、JSON 和 MIME 多部分数据)的开箱即用支持。
  • 组件集成。与其他框架的集成在基于 REST 的服务开发中很重要。通常,您使用 Spring 等其他框架进行依赖项注入,使用其他 Model-View-Controller (MVC) 框架来处理 UI。确定您选择的 JAX-RS 框架与第三方组件的原生集成支持。

http://www.ibm.com/developerworks/cn/web/wa-apachewink3/

你可能感兴趣的:(Restful)