RESTful Web服务和客户端设计

时间:2012-08-10 09:00:38

标签: spring design-patterns rest maven

Tech Stack :Java 1.6,JPA(Hibernate 3),Spring 3,Oracle 11g,JAX-RS(RESTEasy),Freemarker,Spring Webflow,jQuery,JBoss5

您好,

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

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

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

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

    4. 现在,在设计会议上,有人建议如下:

      1. 将图层分隔成单独的模块(如在maven中)
      2. 分别为:

        创建一个模块

        a2。 RESTful服务(包含服务层和javax.ws.rs.Produces)

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

      3. 我不确定我是否能真正看到这些好处,或者这是否是正确的方法。 我想也许我没有看出建议的做法。

        有人可以详细说明哪种方法更好,为什么?

        谢谢, ADI

1 个答案:

答案 0 :(得分:1)

恕我直言,没有必要使用HttpClient和一切来访问服务层。

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

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

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

创建一个处理business + bo的服务层。 使用2个单独的实现创建传输层:

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

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

HIH