介绍
http://www.ibm.com/developerworks/cn/webservices/ws-RESTservices/index.html
REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识。RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作的调用。
REST 的基本设计原则对典型 CRUD 操作使用 HTTP 协议方法:
REST 服务的主要优势在于:
基于 REST 的 web 服务日益成为后端企业服务集成的首选方法。与基于 SOAP 的 web 服务相比,它的编程模型简单,而本机 XML(而不是 SOAP )的使用减少了序列化和反序列化过程的复杂性,并且不再需要其他作用相同的第三方库。
当前用于构建 RESTful 服务,比如 Apache CXF、RESTlet、JAX-WS API 和 REST 支持的基于 Java 的框架可从 Spring 3.0 中获得,它在开发和 XML 配置方面非常复杂,通常需要长期的学习。此外,由于这些框架依赖特定版本的 jar 文件,它们很难跨应用程序服务器环境集成。另外,由于一些同时支持 SOAP 和 REST 服务的尝试(Apache CXF、JAX-WS),它们软件包也往往很大,也可能会影响性能。
因此本文建议使用更简单的可扩展框架将业务服务公开为类 REST 服务。该框架是轻量级的,采用标准的 Front Controller(前端控制器)模式,非常便于理解。它也是可扩展的,可以通过 API 或任何其他集成模式(如 ESB)集成后端服务。通过使用自定义 XML 序列化程序、JAXB 或任何其他对象到 XML 转换工具,可以方便地配置数据交换模型。
本文将详细描述此框架。
回页首
架构概述
在 J2EE 应用程序中,Java API 或服务公开为 Stateless Session Bean API(Session Façade 模式) 或 SOAP web 服务。在这些服务与使用非 Java 技术 (如 .net 或 PHP)的客户端应用程序集成时,处理 SOAP Web 服务将变得非常麻烦,还涉及到大量的开发工作。
这里提到的方法通常用于有很多服务、服务可以重复使用,但使用 SOAP 创建快速集成障碍的互操作性和开发成本很大的组织,帮助它们进行服务集成。此外,在内部治理组织不会在企业 ESB 或 EAI 上公开服务的情况下,很难以点到点的方式集成两种不同的技术服务。
例如,在电信 IT 环境中:
如果以上服务是由一个非 Java 应用程序使用的,那么使用 SOAP web 服务的集成会很麻烦,并需要更多的开发工作。
这种新方法可以用一种框架的形式实现,使它可以在 Java 服务公开为一种类 REST 的资源的其他领域中重新使用。这种方法类似于 Struts 框架方法,由以下组件组成(如下图所示):
该架构包括 Front Controller,作为接收请求并向客户端提供响应的中心点。Front Controller 将请求处理委托给包含此框架处理逻辑的 ActionController。ActionController 执行验证,将请求映射到相应的 Action,并调用生成响应的动作。为请求处理、日志记录和异常处理这些可以被单个 Action 以及 ActionController 使用的动作提供了各种 Helper Service。