在 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。
下图展示了框架的各个组件以及彼此之间如何相互关联。
各种组件描述如下:
这是一个需要调用服务的客户端应用程序。此组件可以是基于 Java 的,也可以是任何其他客户端,只要它能够支持 HTTP 方法
这些都是日志记录、 异常处理和任何常见功能所需的实用程序服务或者实现所需的常量。在示例代码中使用 Apache Commons 日志记录和 Log4j 实现。
框架使用 Front Controller 模式进行集中请求处理,并使用此 Java Servlet 组件处理输入的请求。它支持常见的 HTTP 方法,如 GET、PUT、POST 和 DELETE。
此组件是核心框架控制器,管理加载服务和框架配置的核心功能,验证请求,映射请求与配置 REST 动作并执行动作。
该组件负责在运行时加载和缓存框架配置,以及各种 REST 服务配置。此组件供 RESTActionController 用于确定请求要调用的正确动作,并验证输入请求。
此组件存储在配置文件中指定的 REST 动作映射。映射主要包括客户端调用的 URI 和进行处理的动作类。
此组件封装执行 REST 动作所需的所有功能。它可以帮助开发人员提供请求和响应处理功能,因此开发人员只需要编写实际的业务逻辑实现代码。它向动作组件隐藏协议特定的请求和响应对象,因此允许独立测试 POJO 之类。它还提供一个指向 XML Binding Service 的句柄,让 Java 业务对象可以基于配置的 XML Binding API 方便地转换为 XML,反之亦然。RESTActionController 动态配置此组件,并将其提供给 Action 组件。
此组件封装 Java XML Binding 机制,提供了一个统一的界面用于将 Java 业务对象转换为 XML,反之亦然。通过实现标准的框架接口,它支持任何 XML 绑定机制,如 JAXB、SDO、Castor 等。默认情况下,它为 XMLEncoder 和 XMLDecoder 提供了开箱即用功能。
此组件包含框架和服务配置。当开发 REST 服务时,它们可以加入服务配置文件中。框架配置包含日志记录和 XML Binding 服务,不需要定期更换。
处理典型 POST 请求的这些组件之间的交互如下所示:
如上图所示,REST 服务配置最初加载,并缓存到 RESTConfiguration 组件中。对于 REST 服务的每个 HTTP 请求,RESTServiceServlet 组件将请求委托到 RESTActionController,它又会检索相应的映射、验证请求、创建 ActionContext 组件以及路径和查询输入,并调用 Action 类 (例如,createUserAction)。Action 类调用后端 Java 业务服务进行处理。
本节介绍了这篇文章提供的框架的示例实现。它展示了类关系图、各种配置文件和显示如何将上述设计付诸实行的代码片段。
注意: 示例代码可能没有遵循所有 Java 编码的最佳做法,因为它只是一个示例。
下图显示了示例实现中的类。蓝色所示的类是框架外部的类,将它们放在这里是为了展示与框架的结构关系。
REST,Web 服务,REST-ful 服务,布布扣,bubuko.com
原文:http://www.cnblogs.com/felixjia/p/3608698.html