如何选择完美的RESTful框架?

时间:2010-12-08 09:49:44

标签: api rest frameworks

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

我希望制作一个(相当复杂的)项目,而不是运行API。我对任何编程语言(主要是PHP,Python,Java)持开放态度,并发现许多框架更专注于构建RESTful Web服务器。

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

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

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

  1. Play! Framework(Java)
    • 优点
      • 路由器面向RESTFul(您定义方法(GET,POST等),请求和class.method使用)
      • 您不必为每个操作制作一个课程
    • 缺点
      • 该模型已包含在内。如果我以后改变框架,也许我会坚持使用它(但显然不是因为Play!似乎使用JPA)
      • 如果我想将参数发送到将在方法签名中定义的操作,那么我必须采用ClassName.properties而不是json,如{ClassName:{properties:'value'}} < / LI>
  2. Tornado Web(Python)
    • 优点
      • 似乎非常强大:由FriendFeed使用(至少)!
      • Auth通过主要的OpenId,OAuth和Facebook已经实施
      • 很轻(可能有问题)
    • 缺点
      • 不那么受欢迎:通过进入代码而不是文档
      • ,您更了解工作
      • Urls似乎非常基础(就我所见,你必须在一个文件中定义所有网址,包含所有类)
      • 每个动作一类(可能很重)
      • 必须制作基本的装饰器(测试用户是否为auth等)
  3. 为了在生产中使用它们,使用apache&amp; amp; mod_proxy或nginx。

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

    非常感谢您的建议!

1 个答案:

答案 0 :(得分:14)

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

我更喜欢Restlet因为:

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

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

  • API与Jav​​a约定一致。例如,如果使用ClientResource.get()发出的请求收到错误响应(如401),则会抛出ResourceException。如果您正在实施ServerResource并希望返回错误状态,那么您只需抛出一个ResourceExceptionRuntimeException,这很好。)

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

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

  • 它成熟,可靠,负责任地维护,稳步提升,并得到社区和商业界的充分支持。

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

我建议的其他选项是Python微框架Bottle和Ruby微框架Sinatra。它们既简单,直观,轻便又有效。因为它们与WSGI和Rack堆栈一起使用,所以有一组丰富的“中间件”模块可以很容易地与它们一起使用。