1

我们有一个登录后显示的用户仪表板。仪表板由多个小部件组成。每个小部件从单独的 RESTful 服务中提取内容。例如: /news /mails /questions /alerts 。每个小部件在加载到页面后都会调用该服务。这样就有多个 web 服务调用。

有没有办法减少多次通话。

它应该工作的方式是当页面第一次加载时,服务应该在一次调用中返回所有小部件的聚合数据。

每个服务也应该独立可用,以便它可以用于刷新单个小部件,以及用于其他系统集成。

注意:在这种情况下,小部件是可以使用来自 restful 服务的 json 数据的任何 javascript portlet。所有服务都在一个 Web 应用程序中。

我们如何聚合来自多个服务的响应并组合成一个 JSON?

4

2 回答 2

1

如果您可以添加自己的 JAX-RS 服务,只需添加一个新服务,该服务调用每个其他服务并创建聚合响应。

例如:

GET http://myservice.com/rest/aggregate?service=news&service=mails&service=questions

服务的 url 前缀可以作为单独的编码参数提供,也可以在聚合服务中提供。

如果所有这些都在同一服务器中运行,则只需使用其他服务的现有 API 来创建聚合响应。

于 2013-04-05T13:36:31.110 回答
0

请记住,json 服务只是方法,因此要详细说明@Vengard 的答案(请接受之前的答案),您可以(创建一个如下所示的聚合方法:

@Path ("15218462")
class Test {
  @Path ("aggregate")
  public Map<String, Object> aggregate(@QueryParam("service") List<String> services) {
    Map<String, Object> result = new HashMap<>();       
      for (String serviceName : services) {
        if(serviceName.equals("mails") {
          result.put("mails", mails());
        }
        // ... etc 
      }
  }
  @Path
  public List<String> mails() {
    // .... processing code ...
  }
}

如果服务不受您的控制,并且您不介意依赖第三方,您可能需要查看 Yahoo 管道(http://pipes.yahoo.com/pipes/)之类的东西

于 2013-04-07T08:05:39.343 回答