设计“平台无关”的GWT服务器的最佳方法是什么?

5
什么是最好的设计Java服务器架构的方法,以便与客户端GWT应用程序进行交互,并正确地响应来自其他平台的各种其他客户端请求?具体来说,我想使用相同的servlet层来响应不仅我的GWT应用程序,还要对应iOS和Android应用程序。
我首先想到的方法是使用“RequestBuilder”实现GWT客户端层,而不是通常的RPC方法服务接口。使用这种方法,我可以编写通用的servlet,通过以类似JSON或XML的方式处理编码的变量,以RESTful的方式响应HTTP请求。虽然这样做可以工作,但在客户端和服务器上都必须对对象/参数进行JSON编码和解码,特别是当RPC提供了如此优雅的解决方案时,这将是相当费力的。
另一种方法(我认为更好的方法)是找出Google用于序列化和反序列化其RPC方法调用的规范,并实现某种库,以便iOS(在Objective-C中)和Android也可以做同样的事情。问题在于,我还没有找到有关此编码标准的良好文档,也没有找到实现它的iOS或Android库(尽管我在www.gwtphp.com上找到了类似于PHP的东西)。
有人能引导我找到GWT序列化/反序列化对象的规范,甚至更好的是,实现RPC接口的iOS和/或Android库吗?
3个回答

4

创建一个“服务”层,即一组返回POJO的业务类。

然后您可以轻松地让GWT-RPC和REST调用服务层。

这相当容易和直接。您的问题将是如何创建仅返回POJO的业务层。但那是另一回事了。


2
如果您确实想要一个平台无关的服务器,以便客户端可以与之交互,那么您最好使用“最小公倍数”方法,通常是简单的数据传递和暴露各种操作的句柄。
为此,使用RESTful接口,很可能使用JSON或XML来编码数据,将成为最可支持的选择。
这种方式的主要优点是已经有了很多库来处理序列化/反序列化JSON和XML,并且您使服务尽可能灵活,这意味着您不会通过要求客户端处理除了处理文本和进行Web请求(在最基本级别)之外的任何东西来限制您的客户端群体。
它确实需要更多的工作来使连接的服务器端按您要求工作,但这就是相对于非常通用的REST,任何客户端都可以处理的灵活性和更具针对性的基于RPC的服务之间的权衡。虽然它使一些实现更容易,但它确实限制了客户端的能力,使其只能处理特定的RPC实现。

2
GWT-RPC在客户端部署不受控制时是一个糟糕的选择,因为每次更改类时都需要更新客户端。这也是推动开发RequestFactory的原因之一。并且它可以直接在Android上使用。
话虽如此,我赞同Peter Knego的观点:在单个服务层之上构建特定于协议的公共API。
此外,您可以使用GSON,Jackson和/或GWT AutoBeans将对象序列化为JSON。

感谢您对JSON序列化的建议。 - Eternal Rubyist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接