设计与客户端GWT应用程序交互的Java服务器体系结构的最佳方法是什么,还能正确响应来自其他平台的各种其他客户端请求?具体来说,我想使用相同的servlet层不仅响应我的GWT应用程序,而且响应相应的iOS和Android应用程序。
我想到的第一种方法是使用“RequestBuilder”而不是通常的RPC方法服务接口来实现GWT客户端层。使用这种方法,我可以通过处理以JSON或XML等编码的变量来编写以RESTful方式响应HTTP请求的通用servlet。虽然这样可行,但是在客户端和服务器上对JSON中的对象/参数进行编码和解码会有些费力,尤其是当RPC提供了这样一个优雅的解决方案时。
另一种方法(我认为更好),是找出Google用于序列化和反序列化其RPC方法调用的规范,并实现某种类型的库,为iOS做同样的事情(在Objective-C中)和Android。问题是我无法找到有关此编码标准的良好文档,也没有找到为iOS或Android实现它的库(尽管我在www.gwtphp.com上找到了类似于PHP的文件)。 / p>
有人能引导我指出GWT如何序列化/反序列化他们的对象,或者更好的是,用于实现RPC接口的iOS和/或Android库?
答案 0 :(得分:4)
制作一个“服务”图层,即一组返回POJO的业务类。
然后,您可以轻松地让GWT-RPC和REST调用服务层。
这非常容易和直截了当。您的问题将是如何创建仅返回POJO的业务层。但这是另一个故事。
答案 1 :(得分:2)
如果您真的想要一个客户可以与之交互的独立于平台的服务器,那么您最好的选择是使用“最小公分母”方法,这种方法通常是简单的数据传递和表面处理要发生的行动。
为此,RESTful接口(可能使用JSON或XML进行数据编码)将成为您最受支持的赌注。
采用这种方式的主要优点是已经有 lot 库处理序列化/反序列化JSON和XML,并且您保持服务尽可能灵活,这意味着您是不限制您的客户群,要求他们除了处理文本和发出网络请求之外做很多其他事情(在最基本的层面)。
它做了更多的工作,使连接的服务器端做你想要的,但这是在任何客户端可以处理的相当通用的REST的灵活性之间的权衡以及更多基于RPC的目标服务,虽然它使某些实现更容易,但 将客户端限制为可以处理特定RPC实现的客户端。
答案 2 :(得分:2)
当您不控制客户端部署时,GWT-RPC确实是一个糟糕的选择,因为每次对类进行更改时都必须更新客户端。这是导致RequestFactory开发的原因之一。它将在Android上按原样运行。
尽管如此,我同意Peter Knego:在单个服务层之上构建特定于协议的公共API。
此外,您可以使用GSON,Jackson和/或GWT AutoBeans将对象序列化为JSON。