设计“独立于平台”的 GWT 服务器的最佳方式是啥?
Posted
技术标签:
【中文标题】设计“独立于平台”的 GWT 服务器的最佳方式是啥?【英文标题】:What's the Best Way to Design a "Platform-Independent" GWT Server?设计“独立于平台”的 GWT 服务器的最佳方式是什么? 【发布时间】:2012-01-13 22:02:30 【问题描述】:设计与客户端 GWT 应用程序交互,同时正确响应来自其他平台的各种其他客户端请求的 Java 服务器架构的最佳方法是什么?具体来说,我想使用相同的 servlet 层来响应我的 GWT 应用程序,以及相应的 ios 和 android 应用程序。
我想到的第一种方法是使用“RequestBuilder”而不是通常的 RPC 方法服务接口来实现 GWT 客户端层。使用这种方法,我可以编写以 RESTful 方式响应 HTTP 请求的通用 servlet,方法是处理以 JSON 或 XML 之类的方式编码的变量。虽然这可行,但必须在客户端和服务器上以 JSON 格式编码和解码我的对象/参数会有点费力,尤其是当 RPC 提供如此优雅的解决方案时。
另一种方法(我认为更好)是找出 Google 用来序列化和反序列化其 RPC 方法调用的规范,并实现某种对 iOS 执行相同操作的库(在 Objective-C 中)和安卓。问题是我找不到关于这个编码标准的好的文档,也没有找到为 iOS 或 Android 实现它的库(尽管我确实在 www.gwtphp.com 上找到了类似 PHP 的东西)。
谁能指导我制定 GWT 如何序列化/反序列化其对象,或者更好的是实现 RPC 接口的 iOS 和/或 Android 库的规范?
【问题讨论】:
【参考方案1】:创建一个“服务”层,即一组返回 POJO 的业务类。
然后你可以很容易地让 GWT-RPC 和 REST 调用服务层。
这非常简单明了。您的问题将是如何创建仅返回 POJO 的业务层。但那是另一回事了。
【讨论】:
【参考方案2】:如果您真的想拥有一个客户端可以与之交互的独立于平台的服务器,那么您最好的选择是使用“最小公分母”方法,这通常是简单的数据传递和表面处理各种发生的动作。
为此,RESTful 接口(可能使用 JSON 或 XML 来编码数据)将是您最受支持的选择。
采用这种方式的主要优点是已经有 很多 库处理 JSON 和 XML 的序列化/反序列化,并且您使您的服务尽可能灵活,这意味着您没有限制您的客户群,要求他们做很多事情而不是处理文本和发出网络请求(在最基本的层面上)。
它确实在使连接的服务器端做你想做的事情上做了更多的工作,但这是任何客户端都可以处理的相当通用的 REST 的灵活性之间的权衡以及一个更具针对性的基于 RPC 的服务,虽然它使 一些 实现更容易,但 确实 将客户端限制为那些可以处理特定 RPC 实现的客户端。
【讨论】:
【参考方案3】:当您不控制客户端的部署时,GWT-RPC 确实是一个糟糕的选择,因为每次您对类进行更改时都必须更新客户端。这是导致 RequestFactory 被开发的原因之一。它会在 Android 上按原样运行。
也就是说,我同意 Peter Knego:在单个服务层之上构建特定于协议的公共 API。
此外,您可以使用 GSON、Jackson 和/或 GWT AutoBeans 将对象序列化为 JSON。
【讨论】:
感谢关于 JSON 序列化的建议。以上是关于设计“独立于平台”的 GWT 服务器的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
GWT 2.5 的最佳谷歌地图 V3 API 是啥? [关闭]