我们正在为我们公司构建RESTful API,它将提供XML,JSON和其他可能的内容类型.
我的团队正在寻找一个框架(按优先级排序):
记录良好
理想情况下,有很好的教程,繁荣的社区和知识库
遵循合理的设计模式
我们通常希望在框架中保持一致性.根据您调用的方法调用不会更改的命名约定.
安全
专注于强制开发人员执行GET,POST,PUT和DELETE变量的某种形式的验证
稳定
从框架不经常改变的角度来看,这部分是成熟的
另一部分是一个记录良好的错误列表,并不是很大
可扩展/以性能为导向
我们有超过50,000名用户,他们需要全球范围内的高可用性.如果我们的应用程序发生故障,人们的家中就没有互联网.所以这是一个非常关键的环境.
理想情况下,我们可以在10台服务器上启动相同的代码库,并继续添加负载均衡器.我们不想要定义哪个服务器在哪个方法....
与Linux/MySQL环境很好地集成
我们没有一台MS服务器.我们没有改变这一点.对不起.Net粉丝:-D
我意识到这是一个模糊的目标.没有任何一个框架可以满足所有这些需求,实际上可能有许多框架以不同的方式,形状和形式来满足它们.
这与语言无关.我们已经拥有PHP经验,但我们也有开发人员从未在他们的生活中编写过Web应用程序,因此学习Python或Ruby或Java是可以接受的.
我会在这里出去,并建议Ruby与Sinatra.
为什么?
Sinatra不是"有据可查的",而是"记录良好".考虑到它比其他框架简单得多,因此不需要那么多文档,并且因为它是作为Web服务器构建在Rack上的,所以它与它共享一些通用文档.但你需要知道的是在网站上,而且写得很好并且没有我发现的错误(IE,它都是最新的).
您需要了解的大部分内容都在Sinatra Book,Readme和FAQ中.尽管该书正在进行中,但其内容非常准确和有用.而且,如果你仍然遇到问题,可以去IRC聊天室freenode.net#sinatra.
Sinatra能够用于基于功能/路由的逻辑方法,或者通过覆盖Sinatra :: Application对象.您可以使用其中之一,将逻辑和方法拆分为各种文件,或将其全部保存在一个文件中.全取决于你.
Sinatra本身就是安全的.您必须验证用户发送的所有变量,因为除了解析它们并将它们传递给您之外,Sinatra并不关心它的有效性.因此,您要么强制执行变量的有效性,要么后悔它. ;-)
Sinatra在过去的四个月中没有改变过一堆,但它肯定有维护和次要更新.另外,我没有发现bug列表很大或有威胁.它几乎拥有我用来构建我的应用程序所需的一切.
Sinatra不必与Passenger一起部署,但可以轻松定制以便快速定制.如果您使用Enterprise Ruby和Thin之类的东西,您可以代理Nginix或LightHTTPd.如果您使用了两台服务器,您可以将其中一台服务器(使用代理和多个线程),第二台服务器(使用MySQL和许多线程),让它们松散.这样,任务分布在服务器上.它会给你比我想象的更多的控制权.(更不用说更好的表现.)
我发现Passenger(在Dreamhost上)与Rack,Mongrel或Thin运行线程相比,性能相对较差.也就是说,一旦加载,应用程序即使在该环境中也能响应.如果我要预测它,你就不会有缩放应用程序的问题,因为你只需要重新部署你的代码并重新启动线程 - 没有什么不能放入Capistrano.
Ruby on Linux速度很快,并不是一个需要实现的问题.使用Ruby的MySQL非常简单,并且有几个非常好的ORM包可用,如ActiveRecord和Sequel.Sinatra不会让你选择一个你讨厌的人.
除了你的问题的答案,我还有一些原因.
Sinatra有一个简单的学习曲线,很容易上手.我遇到的最大问题是将它放到我的Dreamhost服务器上,因为Rack是旧版本,但是随着Rack的销售版本问题消失了.如果可以的话,我会用ActiveRecord在Sinatra中重写我最新的Rails项目,以便让我自己轻松维护; 已经花费了太多的努力.
由于其易用性和易学性,我发现自己在没有代码生成器的Sinatra中比在所有代码生成器的Rails中更高效.那是在说些什么.
Sinatra支持Rack的中间件,因此可以非常灵活地使用它.
如果我要在IRC上平衡Sinatra社区的帮助,我会说他们比一般的Rails用户更了解框架 - 就像粗略的比较一样.原因是新手和没有业务编程的人更容易使用Rails.
Sinatra将支持Ruby 1.9.我还不完全确定目前在Sinatra有多少支持1.9,但我知道他们最初在Rack上等待. 截至4月25日,这不再是一个问题,所以Sinatra可能已经准备好了1.9; 我知道有一个事实1.9支持正在筹备2009年中期,但我不知道会有多长时间.
假设您可以轻松地让Sinatra使用Ruby 1.9(版本0.9.2已经支持Rack 1.0,以及Rack的代码中的代理1.9),在支持1.9的公共1.0之前,您在Ruby方面的表现将是恒星.即使你不能,那么Enterprise Ruby也会帮助提高速度.