在Google App Engine Java上实现RESTful应用程序?

84

我想在Google App Engine上创建一个RESTful应用程序,我想提供XML和JSON服务。我已经简要尝试过Restlet、Resteasy和Jersey,除了一些在Restlet中的简单示例之外,其他都没有取得太大成功。

您能否分享使用Java在Google App Engine上创建RESTful Web应用程序的经验或者提供有关GAE上述工具包的任何见解?

谢谢!

编辑(2009-07-25):

我决定暂时使用Restlet。到目前为止,它似乎运行得非常完美。请发布您可能拥有的其他见解/意见。您遇到了哪些问题?您是否成功地在GAE / J上使用了Jersey / Restlet / Resteasy?如果是这样,我们想听听您的经验!


http://technicalrex.com/2014/08/11/creating-a-jersey-app-on-google-app-engine/ 和 http://www.javacodegeeks.com/2012/05/google-app-engine-jax-rs-rest-service.html 是关于Jersey GAE集成的最佳教程。 - Md. Sajedul Karim
这是我们在开发中习惯使用的框架选择问题,我一直在使用Spring MVC与Objectify以及Hibernate,它们在Google App Engine上也能够完美运行。 - Ankur Jain
@AnkurJain 是的,7年时间里发生了很多变化。 - JP Richardson
10个回答

45

很高兴向大家报告,Restlet M3在AppEngine 1.2.2上完美运行。我按照“第一步”和“第一个资源”教程所描述的操作进行了操作,这些教程可以在http://restlet.com/technical-resources/restlet-framework/guide找到。

因此,对于您的GAE / J Restful应用程序来说,Restlet似乎是不二选择。


4
上面的链接已经失效了。Restlet 2.2 版本适用于 GAE 的相关链接是 http://restlet.org/learn/guide/2.2/editions/gae 。 - George Hawkins

17

2
以上链接涵盖了Jersey 1.1.5。GAE团队在此维护有关此版本及更高版本的注释-https://code.google.com/p/googleappengine/wiki/WillItPlayInJava#Jersey - George Hawkins

6
我也打算开始探索这个问题,但还没有开始。我发现了这个框架,它声称可以解决问题,但是像我之前说的那样,我还没有试过。如果你成功了,或者采用了上述建议,请更新一下大家,因为我相信这个问题很受关注。 http://wiki.restlet.org/docs_1.2/13-restlet/275-restlet/252-restlet.html

1
我相信Restlet会起作用。它只是比其他工具稍微难用一些。我特别喜欢Jersey引入的注释。我计划在接下来的几周内使用Restlet。我一定会发布更新的。 - JP Richardson
我在周末也玩了一下这个,Restlet 在 GAE 上运行得非常好。我能够根据 Restlet 网站上给出的示例(我之前留下的链接现在已经失效)组装出一些东西,但是设置一切都很简单。 - broschb
我在我的博客上写了一篇小文章,回答了stackoverflow上的另一个问题。它通过一个非常基本的例子介绍了如何在GAE上使用restlet。http://broschb.blogspot.com/2009/08/restful-service-on-google-app-engine.html - broschb
1
Restlet现在有一个JAX-RS实现。他们还开始分发专门用于AppEngine的构建版本。你应该使用最新的2.0里程碑版本(目前是2.0m4)。我刚为正在开发的新应用程序设置了这个概念验证。我不建议使用Restlet自己的API,因为它过于通用,抽象化过度,总体而言令人困惑。http://www.restlet.org/downloads/2.0/restlet-gae-2.0m4.zip - Mark Renouf
https://dev59.com/2UvSa4cB1Zd3GeqPf6B9 - Jasper

5

3
自从这些勇敢的旧解决方案被拼凑在一起以来,Google显然提供了一个Eclipse插件来创建一个起始项目,该项目可以生成一个App Engine应用程序、一个Android APK和一个Web应用程序,它们都通过由单个注释对象声明定义的接口相互通信。
我自己还没有尝试过这个,但在尝试上面早期消息中描述的更多异构示例之前,请先看一下。

https://developers.google.com/eclipse/docs/appengine_connected_android

这个 Google 视频也很有信息量:

http://www.youtube.com/watch?v=NU_wNR_UUn4


2
我最近在GitHub上使用Jersey, Guice和AppEngine创建了一个项目模板。 它已经使用SimpleDS进行开发,但可以轻松修改为Objectify / JDO进行工作。 项目现在正在这里运行。
对于新项目而言,这应该是一个不错的起点。

2

我强烈建议您看一下Play框架

在主页上观看视频

它有一个GAE模块

使用Siena作为ORM来处理GAE数据存储

从我迄今为止看到的所有Java框架中,我认为它的学习曲线更容易,

  • 很好的文档

  • 一个教程来开发一个完整的应用程序

  • 非常活跃和有帮助的社区,

  • 免费的,也是自由的

  • 由于其无状态的设计,具有高度可扩展性

  • REST友好

  • 通过其模块和插件方法高度可定制

此外,考虑到这是一门大学课程,它真的很容易进入代码,我可以处理几个票和新功能,即使没有任何Java经验,只需使用PHP开发Web应用程序几年就行了

其他好处

  • 非常容易开始,没有复杂的设置,只需下载并解压文件,然后就可以使用了

  • 优秀的开发体验,只需修复代码并刷新即可,Play在开发模式下自动编译更改

  • 快速和轻量级

  • 全栈,您不必集成繁琐的框架才能使其正常工作

  • 出色的错误报告,不再有无尽的错误堆栈跟踪,只显示带有错误的行

  • 任何地方都没有XML配置

  • 与Selenium集成测试的出色TDD支持

我认为作为学习工具的主要优势是,可以窥探源代码而不感到迷失和社区支持...文档非常清晰,您可以通过查看源代码学到很多东西...


Play看起来非常令人印象深刻。然而,它与GAE的集成似乎没有在主项目中得到维护,因此落后于GAE的发布周期。它的GWT插件似乎更加滞后。尽管如此,我会给你点赞,因为你向我展示了这样一个很酷的项目。 - JP Richardson
gae模块由主要开发者开发和维护,siena模块(推荐的GAE ORM,JPA存在许多问题)由社区中非常活跃的成员维护,不幸的是,GWT模块实际上没有得到太多关注... - opensas
GAE模块已经恢复正常!另一位开发者接手了它,这里提供GAE 1.6的支持:http://www.playframework.org/modules/gae-1.6.0/home - opensas

2

就此而言,Jersey用户列表上已经有很多关于如何在GAE上使Jersey工作的讨论。由于GAE的限制(白名单中缺少类-希望随着时间的推移得到解决),这是一项有点繁琐的工作,但显然可以实现。因此,虽然不是轻松易行的事情,但这可能是您最好的选择;特别是因为面临的许多问题对所有框架都是相同的(由GAE强加)。


我想问一下,您是否有任何解决方案来回答我的问题,链接在这里:https://dev59.com/XY_ea4cB1Zd3GeqPM1VO,谢谢。 - Marco Dinatsoli

1

这是一个非常好的教程,介绍了Restlet/Android/GAE/Objectify,并提供了一个简单应用程序的示例。很抱歉它是用法语编写的,但您可以复制/粘贴代码或使用Google翻译。

我按照这个教程操作,在两个小时内就实现了Android / GAE服务器之间的通信。这是一个很好的起点,可以开始或测试Restlet。

http://www.tutos-android.com/webservice-rest-android-appengine-restlet-objectify

祝你好运


-1

无论是Java还是.py,最棘手的GAE REST API操作是图形和如何取消显示私人信息。 我的小 gae rest feed分叉另一个项目。我相信Java在Python卡住的地方成功了,因为Java需要更多的方式(优势)以及更长的时间(缺点)来成功,而Python项目开启的成功途径较少(不利),开发时间较短(有利于快速开发)。


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