2010-12-08 78 views
9

我知道这个问题太广泛了,不能用简单的“使用这个框架”来回答,但我真的很感激你对此的建议。如何选择完美的RESTful框架?

我正在寻找一个(相当复杂)的项目,而不是通过API运行。我对任何编程语言(主要是PHP,Python,Java)都是开放的,并且发现了更多面向构建RESTful Web服务器的框架。

我唯一的主要限制是我会有一个可重复使用的,简单的和非代码意大利面独立的软件包,以便稍后改进我的API,甚至可以毫不费力地切换到其他框架。

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

经过多方考证,我用两个框架,可能是对我的工作,但之间犹豫,我需要你的意见,因为我不会犯任何错误在这里。

  1. Play! Framework(JAVA)
    • 优点
      • 路由器是基于REST的面向(您定义的方法(GET,POST等),请求和class.method使用)
      • 您不必每行动一个类
    • 缺点
      • 模型已包含在内。如果我后来改变框架,也许我会坚持下去(但显然不是因为Play!似乎使用JPA)
      • 也许事实是,如果我想将参数发送到将在方法签名中定义的动作,我必须采用ClassName.properties而不是像JSON {产品类别:{属性: '值'}}
  2. Tornado Web(Python)的
    • 优点
      • 似乎很强大:由FriendFeed使用(至少)!
      • 验证通过主要的OpenID,OAuth的和Facebook已经实施
      • 很轻(可能是一个问题)
    • 缺点
      • 不那么受欢迎:你更好地了解由去工作到代码比文档
      • 网址似乎是非常基础(据我所知,你必须在一个文件中定义所有的网址,包括所有类)
      • 每个动作
      • 一类(也可能是重度)
      • 装饰的基本(测试如果用户身份验证等)必须进行

对于在生产中使用它们,它会很容易与Apache & mod_proxy或nginx。

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

非常感谢您的建议!

回答

14

我最喜欢的RESTful Web App开发框架是Restlet。这是一个Java框架/库(它可以被认为是),但它可以很好地与JythonJRuby,所以如果你喜欢这些语言,你仍然可以使用它。我主要与Groovy一起使用它。

我喜欢的Restlet因为:

  • 它的API完全拥护和REST风格的范例对齐,所以它鼓励你以REST风格的工作。例如,当Router将请求路由到ServerResource时,它会为每个请求创建一个新的ServerResource实例。这鼓励实施是无国籍的。并且有丰富的类层次结构,其中包含实现RESTful Web应用程序所需的所有概念:客户端,服务器,协议,虚拟主机,请求,响应,媒体类型,状态等。

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

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

  • 通过它的扩展机制,它可以很好地与各种各样的最好的Java库一起玩。各种HTTP客户端和服务器库,数据库,模板库,安全库,数据库如XML,JSON,OAuth,OData等,甚至OSGI都包含扩展。

  • 部署非常灵活。您可以将Restlet驱动的API嵌入到现有的Java应用程序,现有的Java Servlet应用程序或任何标准的Java Web App(Servlet)服务器中。或者,您可以使用嵌入式HTTP服务器(如Jetty)构建独立的服务器应用程序 - 这是我的首选方法。而且由于它运行在JVM上,它几乎可以在任何硬件或操作系统上运行。

  • 它是成熟的,可靠的,负责任的维护,稳步提高,并得到社区和商业的支持。

  • 它是开源的,代码非常清晰,结构良好。开发者乐意接受任何贡献。我已经提交了一些补丁,并让他们承诺在没有戏剧的情况下快速恢复。

我建议其他选项将是Python的microframework Bottle和红宝石microframework Sinatra。它们既简单,直接,轻便又有效。而且,由于他们可以与WSGI和Rack堆栈一起工作,因此可以轻松使用一组丰富的“中间件”模块。

+0

哇!这是一个非常完整的答案!我非常感谢您花时间回答我的问题!我会看看Restlet :)非常感谢你! – 2010-12-08 20:34:08