适用于AppEngine的RESTful服务框架

27

我正在开发一个涉及移动端和Web客户端的项目,使用Google的AppEngine PAAS。我希望在我的AppEngine应用程序中使用RESTful web服务。

我查看了Stackoverflow上与可以与AppEngine一起使用的RESTful服务框架的引用,适用于Web(GWT)和移动(Android)客户端。尽管Restlet似乎提供了适用于AppEngine、GWT和Android的版本,但到目前为止,由于这个问题,我主要使用RestEasy

以前有过一些问题讨论RESTFul框架,但我认为这些比较不适用于这种现在相当普遍的情况。听取经验丰富的开发人员对这些平台可用的框架的观点以及每个框架的优点和缺点会非常有帮助。


我已经在AppEngine上愉快地使用RestEasy一年多了。 - Riley Lark
我已经在App Engine、GWT和Android上使用Restlet约6个月了。请参见我的答案(https://dev59.com/dGDVa4cB1Zd3GeqPe5qg#9352079)获取一些详细信息。 - Andy Dennie
此外,Restlet团队最近发布了他们未来活动的路线图,这可能会影响您的评估。请参见http://blog.restlet.com/2012/02/25/the-road-ahead-from-noelios-to-restlet/。 - Andy Dennie
我听说如果你选择Java路线,Jersey是一个不错的选择。 - aglassman
@RileyLark,你已经使用过RestEasy和AppEngine了,你能帮我解决一下在App Engine上使用RestEasy的问题吗?这是我的问题链接:http://stackoverflow.com/questions/9629028/resteasy-with-google-app-engine - quarks
在使用RESTLet一段时间后,我不得不承认它真的很糟糕...遇到了似乎没有解决方案的问题,而且在SO上提出的其他问题也得到了相同的建议。 - Saad Farooq
5个回答

37

你可能希望考虑使用Google Cloud Endpoints,它被宣布为Google I/O中App Engine的受信任测试人员功能,并且现在可供所有人使用。使用Endpoints,您可以对简单的Java(或Python)类和方法进行注释,以描述您的API。例如,以下是一个简单的类,用于获取和检索Tic Tac Toe游戏中的高分列表:

@Api(name = "tictactoe")
public class ScoreEndpoint {
  @ApiMethod(name = "scores.get")
  public Score get(@Named("id") String id) {
    PersistenceManager pm = getPersistenceManager();
    Score score = pm.getObjectById(Score.class, id);
    pm.close();
    return score;
  }

  @ApiMethod(name = "scores.list")
  public List<Score> list() {
    PersistenceManager pm = getPersistenceManager();
    Query query = pm.newQuery(Score.class);
    return (List<Score>) pm.newQuery(query).execute();
  }
}

特性

  • 支持Java和Python运行时
  • 基于Google的API基础设施构建 - 它与许多用于Google自己的API的相同工具和库一起工作,如API ExplorerAPI控制台
  • 为Android和iOS自动生成的静态类型客户端库 - 这些库使用了与访问其他由Google提供的API(例如日历API)所使用的Google编写的JavaObjective-C库相同的库
  • 动态类型JS客户端库 - 同样,您使用与JS中访问其他由Google提供的API所使用的相同的库
  • 内置OAuth 2支持
  • 与Eclipse的Google插件集成 - 这使您可以自动创建基于模型的API,或者创建一个App Engine应用程序来支持现有的Android应用程序
  • 本地开发支持 - 您可以使用App Engine开发环境来构建和测试API,就像使用其他App Engine功能一样

了解更多

查看文档以获取有关使用Endpoints的更多详细信息。

您还可以观看来自Google I/O的几个演讲:


已经注册了可信测试者计划,从我所看到的来看,这绝对是未来前进的方向。 - Saad Farooq
其他客户端,比如 .Net 连接怎么样? - AlikElzin-kilaka
Endpoints的初始版本主要针对移动客户端(JS、Android、iOS),但.NET也应该可以使用,使用https://code.google.com/p/google-api-dotnet-client/。 - Dan Holevoet
Cloud Endpoints客户端库不支持AngularJS的Promise API。 - JackNova

2

2

我尊重你不使用Restlet的决定,但对于这个主题的其他浏览者,我已经能够使用Android/Restlet/GAE使Post工作 - 而且我的知识和编程技能相当有限。我在使用Restlet Edition for Javascript时遇到了一些问题(它仍处于早期开发阶段),但我记得Restlet for Android没有出现任何问题。


1
有点无关紧要...但根据我的经验,到目前为止,Restlet成为一个令人头痛的工具,与GAE和Android不太相关,但一旦涉及GWT,它就开始出现难以解释的问题。 - Saad Farooq
我不太喜欢Restlet API,比如设置HTTP头就很麻烦,但这是Restlet的理念,要从Http上抽象出来!无论如何,另一个痛点是冷启动时间很长。您认为Cloud Endpoints会表现得更好吗?它们可能由于注释而执行相同的Jar扫描。 - ZiglioUK

1

我过去三年一直在App Engine上使用Restlet。 - ZiglioUK
Restlet的启动时间相对较长,而我的需求非常基本。我很好奇Cloud Endpoints与Restlet相比如何,是否更快?还有其他区别吗? - ZiglioUK

0
如果你在考虑使用GAE,可以考虑一下duyproject。这个项目以其openid库而闻名,但它还有一个非常轻量级的REST servlets库。而与GAE一起使用时,你要保持所有库都很轻量级,以免超过字节限制。

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