【问题标题】:RESTFul Service Framework for AppEngineAppEngine 的 RESTFul 服务框架
【发布时间】:2012-03-16 05:59:29
【问题描述】:

我正在开展一个项目,该项目涉及使用 Google 的 AppEngine PAAS 的移动和网络客户端。我想在我的 AppEngine 应用中使用 RESTFul 网络服务。

我查看了 Stackoverflow 中对 RESTFul 服务框架的引用,这些框架可用于 Web (GWT) 和移动 (Android) 客户端的 AppEngine。尽管Restlet 似乎提供了适用于 AppEngine、GWT 和 Android 的版本,但到目前为止,我已将其归结为RestEasy,主要是因为question

以前有过discuss RESTFul frameworks 的问题,但我认为比较不适用于这个现在很常见的案例。听取经验丰富的开发人员对可用于这组平台的框架的看法以及每个平台的优缺点会很有帮助。

【问题讨论】:

  • 我在 AppEngine 上使用 RestEasy 已经有一年的大部分时间了。
  • 我已经在 App Engine、GWT 和 Android 上使用 Restlet 大约 6 个月了。有关详细信息,请在此处查看我的答案 (stackoverflow.com/questions/9348616/…)。
  • 另外,Restlet 人最近发布了他们未来活动的路线图,这可能会影响您的评估。见blog.restlet.com/2012/02/25/…
  • 我听说如果你走 java 路线,泽西岛会​​很好。
  • @RileyLark 你曾与 RestEasy 和 AppEngine 合作过,如果你能帮我解决我在应用引擎上的 resteasy 问题,你介意吗:stackoverflow.com/questions/9629028/…

标签: google-app-engine rest jax-rs restlet resteasy


【解决方案1】:

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

@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 的相同工具和库一起使用,例如 APIs ExplorerAPIs Console
  • 自动生成的、静态类型的 Android 和 iOS 客户端库 - 这些库使用与 Google 编写的 JavaObjective-C 库相同的库,您可以使用这些库访问其他 Google 提供的 API,例如日历 API
  • 动态类型的 JS 客户端库 - 同样是您在 JS 中用于访问其他 Google 提供的 API 的库
  • 内置支持 OAuth 2
  • 与 Google Plugin for Eclipse 集成 - 这允许您自动创建基于模型的 API,或 App Engine 应用程序以支持现有的 Android 应用程序
  • 支持本地开发 - 您可以使用 App Engine 开发环境构建和测试您的 API,就像使用其他 App Engine 功能一样

了解详情

查看documentation 了解有关使用端点的更多详细信息。

您还可以观看 Google I/O 的多个演讲:

【讨论】:

  • 注册了 Trusted Tester 计划,据我所知,这绝对是前进的方向
  • 从 .Net 等其他客户端连接怎么样?
  • Endpoints 的初始版本主要关注移动客户端(JS、Android、iOS),但 .NET 应该也能正常工作,使用 code.google.com/p/google-api-dotnet-client
  • Cloud Endpoints 客户端库不支持 AngularJS 的 Promise API
【解决方案2】:

我一直在 GAE 上使用 Spring RESTful 服务,运气不错,并且一直在使用 Android Native、Phonegap 和 IOS 客户端,没有任何问题。

http://blog.springsource.org/2009/03/08/rest-in-spring-3-mvc/

【讨论】:

    【解决方案3】:

    我尊重您不使用 Restlet 的决定,但对于该线程的其他浏览器,我已经能够使 Post 与 Android/Restlet/GAE 一起工作 - 我的知识和编程技能相当有限。我在让用于 Javascript 的 Restlet 版本正常工作时遇到了一些问题(它仍处于早期开发阶段),但用于 Android 的 Restlet 没有造成我记得的问题。

    【讨论】:

    • 有点不相关......但从我目前的经验来看。事实证明,Restlet 使用起来很痛苦,与其说是 GAE 和 Android,但只要 GWT 混合使用,它就会开始产生莫名其妙的问题
    • 我也不是 Restlet API 的忠实拥护者,例如设置一个 http 标头是很痛苦的,但这是 Restlet 的哲学,从 Http 中抽象出来!无论如何,另一个痛点是冷启动时间。您认为 Cloud Endpoints 的性能会更好吗?由于注释,他们可能会进行相同的 jar 扫描
    【解决方案4】:

    【讨论】:

    • 过去三年我一直在 App Engine 上使用 Restlet。
    • Restlet 的启动时间相当长,我的需求非常基本。我很好奇 Cloud Endpoints 与 Restlet 相比如何,更快吗?其他区别?
    【解决方案5】:

    如果您正在查看 GAE,您可以考虑的一个选择是 duyproject。它以 openid 库而闻名,但它也有一个用于 REST servlet 的轻量级库。使用 GAE,您希望保持所有库的轻量级,以免超出字节限制。

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 2017-01-12
      • 1970-01-01
      • 2018-03-29
      • 2013-06-19
      • 2018-01-30
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多