2013-03-05 59 views
1

我們有一個用戶儀表板,登錄後顯示。儀表板由多個小部件組成。 每個小部件都從獨立的寧靜服務中提取內容。 例如:/新聞/郵件/問題/警報。 每個小部件在加載頁面後調用該服務。這樣就有多個webservice調用。如何彙總來自多個服務的JAX-RS響應

有沒有減少多個呼叫的方法。

它應該工作的方式是在第一次加載頁面時服務應該返回單個調用中所有小部件的聚合數據。

每個服務也應該獨立使用,以便它可以用於刷新單個窗口小部件和其他系統集成。

注意:一個小部件是這種情況是任何可以使用來自寧靜服務的json數據的javascript portlet。 所有服務都在一個Web應用程序中。

我們如何彙總來自多個服務的響應併合併爲一個JSON?

+0

你有在提供的服務(/新聞/郵件的任何控制..)?他們至少在同一主機上? – acdcjunior 2013-04-05 03:26:59

回答

1

如果您可以添加您自己的JAX-RS服務,只需添加一個調用其他服務的新服務並創建聚合響應。

例如:

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

對中的service URL前綴可以被提供爲單獨的編碼參數,或聚合服務內。

如果所有這些在相同的服務器上運行,只需使用現有的API用於其他服務即可創建聚合響應。

+0

感謝您的提示。我未能實現聚合是一種具有自己的序列化程序的新型Web服務。 – 2013-04-08 10:54:26

0

記住,JSON服務僅僅是方法,因此闡述@ Vengard的答案(請接受一個,因爲它前面是)你湊(LD創建這將是這個樣子一個聚合方法:

@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 ... 
    } 
} 

如果服務是不是你的控制之下,你不介意依賴於第三方的你可能想看看像雅虎管的東西(http://pipes.yahoo.com/pipes/

相關問題