2012-01-13 77 views
5

設計與客戶端GWT應用程序交互的Java服務器體系結構的最佳方式是什麼,同時也能正確響應來自其他平臺的各種其他客戶機請求?具體來說,我想使用相同的servlet層來響應不僅我的GWT應用程序,但對相應的iOS和Android應用程序。設計「獨立於平臺」的GWT服務器的最佳方式是什麼?

我想到的第一種方法是使用「RequestBuilder」而不是通常的RPC方法服務接口來實現GWT客戶端層。使用這種方法,我可以通過處理以JSON或XML之類的東西編碼的變量,以REST風格的方式編寫響應HTTP請求的泛型servlet。雖然這可行,但在客戶端和服務器上都必須使用JSON對我的對象/參數進行編碼和解碼,這需要花費大量人力,尤其是當RPC提供了這樣一個優雅的解決方案時。

另一種方法(我認爲更好)是找出規範谷歌用來序列化和反序列化他們的RPC方法調用,並實現某種類型的庫,爲iOS做相同的事情(在Objective-C中)和Android。問題是我一直無法找到有關此編碼標準的良好文檔,也沒有找到在iOS或Android上實現它的庫(儘管我在www.gwtphp.com上發現了類似PHP的文件)。

任何人都可以引導我規範GWT如何序列化/反序列化它們的對象,或者甚至更好地實現用於iOS和/或Android的實現RPC接口的庫?

回答

4

製作一個「服務」層,即一組返回POJO的業務類。

然後你可以很容易地讓GWT-RPC和REST調用服務層。

這很簡單直接。你的問題將是如何創建一個只返回POJO的業務層。但這是另一回事。

2

如果你真的想要一個平臺無關的服務器,客戶端可以互動,那麼你最好的選擇就是使用「最小公分母」方法,這通常是簡單的數據傳遞和曲面處理各種行動發生。

爲此,一個RESTful接口(可能帶有用於編碼數據的JSON或XML)將成爲您支持度最高的賭注。

要去這種方式的主要優點是,目前已經有許多與序列化/反序列化JSON和XML處理庫,和你保持你的服務儘可能的靈活,這意味着你是限制你的客戶羣,要求他們除了處理文本和提出網絡請求(最基本的層面)外,還要做很多事情。

確實提上建立連接的服務器端做你想要什麼更多的工作,但是這是很普通的REST,任何客戶端可以處理和更多的靈活性之間的權衡目標基於RPC的服務,雖然它使得的某些實現更容易,但確實將的客戶端限制爲那些可以處理特定RPC實現的客戶端。

2

當您不控制客戶端的部署時,GWT-RPC確實是一個不錯的選擇,因爲每次更改客戶端時都必須更新客戶端。這是導致開發RequestFactory的原因之一。它會在Android上運行。

也就是說,我同意Peter Knego:在單個服務層之上構建協議特定的公共API。此外,您可以使用GSON,Jackson和/或GWT AutoBeans將對象序列化爲JSON。

+0

感謝您對JSON序列化的建議。 – depthfirstdesigner 2012-01-16 02:32:00

相關問題