【问题标题】:RESTfull web service and client designRESTful Web 服务和客户端设计
【发布时间】:2012-08-07 13:32:40
【问题描述】:

技术栈:Java 1.6、JPA (Hibernate 3)、Spring 3、Oracle 11g、JAX-RS (RESTEasy)、Freemarker、Spring Webflow、jQuery、JBoss5

你好,

目前我正在开展一个项目,其中我们有两组功能

  1. 发布一组 Web 服务 (RESTful) 供外部客户端使用。
  2. 创建一组屏幕(大约 10 个),基本上允许执行管理功能,例如创建 MI 报告、设置新数据、配置和查看过去的数据。

我的方法是:

  1. 创建服务层
  2. Webflow 和 Freemarker 模板调用此服务层上的方法。

  3. 并为 REST (@Path) 创建另一层组件,再次使用相同的服务层。

现在在一次设计会议上,有人提出以下建议:

  1. 将层分离为单独的模块(如在 maven 中)
  2. 为以下各项创建一个模块:

    a2. RESTful 服务(带有服务层和 javax.ws.rs.Produces)

    b2. 带有调用模块 a2 中发布的服务的服务层的屏幕。这将使用 org.apache.commons.httpclient.HttpClient 来调用 a2 服务。

我不确定我是否真的能看到好处,或者这是否是正确的方法。 我想也许我不理解建议的方法。

谁能详细说明哪种方法更好,为什么?

谢谢, 阿迪

【问题讨论】:

  • 听起来不错,但使用 JAX-RS 不会使系统 RESTFull。为此,您必须考虑您的资源及其代表是什么。

标签: spring design-patterns rest maven


【解决方案1】:

恕我直言,这不是必须使用 HttpClient 和一切来访问服务层的。

这种机制将产生 巨大无用 CPU 开销(序列化/伪造 http 传输/反序列化消息)以在非常接近的 2 层之间进行通信(在同一场战争)。

如果您确定管理屏幕和 REST 服务将始终一起部署,请使用直接通信,保持务实。

您应该保留一个 Maven 项目。无需为 10 个屏幕和 5 个 REST 服务创建复杂的项目。保持简单。

创建一个处理业务+bo的服务层。 创建具有 2 个独立实现的传输层:

  • REST 服务直接从服务层调用 java 类的一种
  • 一个用于管理,也可以直接从服务层调用java类

如果你真的想创建 maven 模块, - 创建一个模块,将业务服务类捆绑在一个 jar 中 - 创建两个模块,将传输实现捆绑在 2 个单独的 jar 中 - 创建一个模块,将业务 services.jar、两个传输 implementation.jar 及其依赖项捆绑在一起

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多