App Engine - RequestFactory vs servlets与其他aproaches

leo*_*rou 6 google-app-engine android servlets requestfactory

我们的团队正在使用App Engine开发Android应用程序.关于客户端 - 服务器通信的实现,我们有一些不同意见.一方面App Engine建议使用RequestFactory方法,(正如谷歌所说)

provides a solid foundation for automatic batching and caching of requests in the future

light-weighed

但我们发现这种方法有点"笨拙".另一方面,我们可以使用我们熟悉的普通servlet方法,并且感觉更舒服.我们肯定想要更轻,更快可扩展的通信,但RequestFactory真正提供它们的比例是多少?我们还可以从这两种方法中获得和放松.

[更多内容,我们读到了诸如GWT-RPC(旧版本的RequestFactory)和RestyGWT等选项.但我们对这些方法知之甚少,不确定它们是否符合我们的要求.]

我在这里找到了一些类似的问题没有回答 所以我想,对许多人来说,这可能是一个有用的讨论.

Pet*_*ego 5

几点说明:

  1. RequestFactory不是AppEngine的一部分(参见此处),而是最新的Android Eclipse插件引入的附加组件.最初RequestFactory是为GWT创建的.

  2. RequestFactory的优点是可以与GWT和Android无缝协作.

  3. 缺点是它不是跨平台的,即不适用于iPhone等.

  4. 目前还不清楚如何版本RequestFactory.如果您的应用程序很大且不断发展,那么您必须拥有两个或更多版本的RPC API来为客户端提供服务.GWT客户端很容易被迫使用最新的API(=页面重新加载),而Android则不然.AFAIK,没有选项可以有两个RequestFactory端点.使用REST,您可以为不同的API版本提供多个URL.

  5. 混合公共/私有API.由于没有多个RequestFactory端点,因此您无法轻松将它们划分为公共端口(无需身份验证)和私有/安全(= auth required).使用REST(和GWT-RPC),您可以简单地拥有两个servlet(私有和公共),并在web.xml中设置安全性约束(或拥有自己的servlet Filter).

  6. RequestFactory不支持java.util.Map.这严重限制了你拥有动态属性的实体的能力 - 这有解决办法,但它们是IMO不必要的kludge(比如有两个列表,一个用于键,另一个用于值).

解决方案:这是我在项目中使用的解决方案:

  1. 创建一个返回POJO域对象的服务层.

  2. 创建调用服务层的RPC层.您可以使用多个RPC技术来调用相同的服务层.我通常有GWT-RPC和REST.

  3. 有时不可能使用仅POJO域对象(也是由于JPA/JDO),因此迫使您创建DTO.DTO很难维护,如果可能的话,我尽量避免使用它们.大多数时候可以使用域对象和一些变通方法:在AppEngine上,使用Objectify而不是低级/ JPA/JDO可以获得很多帮助.它支持GWT-RPC.使用REST,我建议您使用Jackson,在那里您可以进行各种自定义转换.