2012-01-13 62 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

相关问题