如何选择完美的RESTful框架?

Cyr*_* N. 9 api rest frameworks

我知道这个问题太宽泛了,无法用简单的"使用这个框架"来回答,但我真的很感激你对这个问题的建议.

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

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

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

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

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

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

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

非常感谢您的建议!

Avi*_*lax 14

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

我更喜欢Restlet因为:

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

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

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

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

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

  • 它成熟,可靠,负责任地维护,稳步改进,并得到社区和商业方面的良好支持.

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

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