【问题标题】:How to choose the perfect RESTful framework?如何选择完美的 RESTful 框架?
【发布时间】:2010-12-08 09:49:44
【问题描述】:

我知道这个问题太宽泛了,无法用简单的“使用这个框架”来回答,但我非常感谢你对这个问题的建议。

我正在寻找一个(相当复杂的)项目,而不是通过 API 运行。我对任何编程语言(主要是 PHP、Python、Java)都持开放态度,并发现许多框架更倾向于制作 RESTful Web 服务器。

我唯一的主要限制是我将拥有一个可重用、简单且与代码无关的包,以便以后轻松改进我的 API,甚至可以毫不费力地切换到其他框架。

对于 Python 和 Java,我考虑过制作一个专用包。每个动作都会调用包中的专用方法,包会返回 object/dict,动作会将其转换为正确的格式。

经过多次研究,我在两个可能对我的工作有益的框架之间犹豫不决,但我需要你的建议,因为我不会在这里犯任何错误。

  1. Play! Framework (Java)
    • 优点
      • 路由器面向 RESTFul(您定义方法(GET、POST 等)、请求和要使用的 class.method)
      • 您不必为每个操作创建一个类
    • 缺点
      • 模型已包含在内。如果我以后更改框架,也许我会坚持下去(但显然不是,因为 Play!似乎使用 JPA)
      • 也许事实是,如果我想向方法签名中定义的操作发送参数,我必须采用 ClassName.properties 而不是像 {ClassName: {properties: 'value'}} 之类的 json /li>
  2. Tornado Web (Python)
    • 优点
      • 似乎非常强大:被 FriendFeed 使用(至少)!
      • 已通过主要 OpenId、OAuth 和 Facebook 进行身份验证
      • 很轻(可能是个问题)
    • 缺点
      • 不那么受欢迎:你通过阅读代码比阅读文档更了解工作
      • Urls 似乎很基础(据我所知,您必须在一个文件中定义所有 url,包括所有类)
      • 每个动作一个类(可能很重)
      • 必须制作基本的装饰器(测试用户是否是 auth 等)

为了在生产中使用它们,使用 apache & mod_proxy 或 nginx 很容易。

所以,我的问题很简单:你会选择什么(在这两个或其他之间,我不接受建议)以及为什么?

非常感谢您的建议!

【问题讨论】:

    标签: api rest frameworks


    【解决方案1】:

    我最喜欢的 RESTful Web App 开发框架是Restlet。它是一个 Java 框架/库(可以被认为是两者之一),但它适用于 JythonJRuby,因此如果您更喜欢这些语言,您仍然可以使用它。我主要将它与Groovy 一起使用。

    我更喜欢 Restlet,因为:

    • 它的 API 完全包含并与 RESTful 范式保持一致,因此它鼓励您以 RESTful 方式工作。例如,当Router 将请求路由到ServerResource 时,它会为每个请求创建一个ServerResource 的新实例。这鼓励实现是无状态的。还有一个丰富的类层次结构,包含实现 RESTful Web 应用程序所需的所有概念:客户端、服务器、协议、虚拟主机、请求、响应、媒体类型、状态等。

    • 它的 API 包括用于编写服务器和客户端的类,它们非常一致且几乎是对称的。例如,有一个 ServerResource 类和一个 ClientResource 类。 ServerResource.get()ClientResource.get() 都返回 Representation。唯一的区别是您实现ServerResource.get() 并生成响应表示,而您调用ClientResource.get() 并接收响应表示。

    • API 与 Java 约定一致。例如,如果使用ClientResource.get() 发出的请求收到诸如401 之类的错误响应,则会抛出ResourceException。如果你正在实现 ServerResource 并想要返回错误状态,你只需抛出一个 ResourceException(这是一个 RuntimeException,这很好)。

    • 通过它的扩展机制,它可以很好地与周围的各种最佳 Java 库配合使用。包括各种 HTTP 客户端和服务器库、数据库、模板库、安全库、XML、JSON、OAuth、OData 等数据库,甚至 OSGI 的扩展。

    • 部署非常灵活。您可以在现有 Java 应用程序、现有 Java Servlet 应用程序或任何标准 Java Web 应用程序 (Servlet) 服务器中嵌入基于 Restlet 的 API。或者,您可以构建一个带有嵌入式 HTTP 服务器(例如 Jetty)的独立服务器应用程序——这是我的首选方法。而且因为它在 JVM 上运行,所以它几乎可以在任何硬件或操作系统上运行。

    • 它成熟、可靠、负责任地维护、稳步改进,并得到社区和商业的大力支持。

    • 它是开源的,并且具有非常清晰和结构良好的代码。开发人员很乐意接受任何贡献。我已经提交了一些补丁,并让它们快速提交到主干,没有任何戏剧性。

    我建议的其他选项是 Python 微框架 Bottle 和 Ruby 微框架 Sinatra。它们都简单、直接、轻量且有效。由于它们与 WSGI 和 Rack 堆栈一起工作,因此有一组丰富的“中间件”模块可以轻松地与它们一起使用。

    【讨论】:

    • 哇!这是一个非常完整的答案!我真的很感谢你花时间回答我!我会看看 Restlet :) 非常感谢!
    • @cx42net:我的荣幸!请让我们知道您的想法! (顺便说一句,如果你喜欢我的回答,你应该投票。)
    • 我想投票(我一读就试过了)但我的低调不允许我这样做:(
    • 谢谢@stinkymatt。 @cx42net,我赞成这个问题,它写得很好,也很周到。
    • 我喜欢 Restlet,因为在我在 Google App Engine 中测试的所有 REST 框架中,Restlet 是最快的。唯一不好的是它没有实现 JAX-RS。这就像一个不实现 JPA 的超快速休眠:/
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多