我们正在为我们公司构建一个RESTful API,它将提供XML,JSON和其他可能的内容类型。
我的团队正在寻找一个框架(按优先级排序):
我意识到这是一个模糊的目标。没有任何一个框架可以满足所有这些需求,事实上可能会有许多框架以不同的方式,形状和形式来满足它们。
这与语言无关。我们已经拥有PHP经验,但我们也有开发人员从未在他们的生活中编写过Web应用程序,因此学习Python或Ruby或Java是可以接受的。
答案 0 :(得分:5)
我会在这里发表意见并用 Sinatra建议Ruby。
为什么?
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上等待。 As of April 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也会帮助提高速度。
答案 1 :(得分:4)
Django和Rails都非常接近你的大多数标准,除了我认为Django的文档方式比Ruby on Rails更好; Django的文档简直就是 Amazing (我在这里不是双曲线)。
但是,我不知道Django的可扩展性。我知道Rails可以很好地扩展(直到某一点),但我不知道Django是否可以这么说。 (我不是说它不能;我只是说我老实说不知道,因为我从未写过大< / em>使用Django的应用程序。)Django也有一个pony,如果你也暗中要求它。
答案 2 :(得分:3)
好。可伸缩性并非易事。对于类似Google的响应时间,您需要MapReduce之类的内容。好。不要自欺欺人,超级可扩展性对于初学者来说并不算什么。
至于所有其他方面,Seaside显然是最好的。至于安全性,请查看seaside.st以了解它为什么比我所知道的所有其他框架(包括Rails和Seam,例如)本质上更安全。海边有相当好的记录,但是看海边的内部是如此简单和方便,社区回答的问题几乎没有问题,这通常很快。海边已经稳定多年了,所以我觉得你会好起来的。
至于面向性能:运行商业Seaside,GLASS,与LAMP类似的设置相比,由于集成的数据库解决方案速度更快,以及交换内存的框架,您将获得惊人的性能速度快,速度快。
Seaside的架构非常好,很多人发现编写Seaside应用程序比桌面应用程序更容易。尝试一下,你会爱上它。
PS:据记载,Seaside不是RESTful。答案 3 :(得分:2)
你可以看看Django,Python框架。 它是一个文档很好的框架,它在数据库上有一个自动CRUD管理员界面,它还有一本免费的在线书籍,当然你可以买到真实的:)
答案 4 :(得分:1)
全部尝试找出正确的答案!
那么,那些建议“一个框架来统治所有人”的人也不会尝试过所有人!
答案 5 :(得分:0)
我想如果有这样一个框架,它将是唯一的。
答案 6 :(得分:0)
对于PHP,我喜欢Zend框架(但对我而言,它并不是一个真正的框架)。其中一个最好的功能是每个组件都独立于其他组件......所以,如果你不喜欢它的某些部分,就不要使用它。另外,你提到JSON ...... Zend完全支持两个方向的JSON ....
答案 7 :(得分:0)
Ruby on Rails已经大量记录了大量插件,并且已经在可扩展性方面进行了测试(参见BaseCamp和其他在rails中制作的解决方案)
答案 8 :(得分:0)
如果您正在考虑使用Java,我会推荐Jersey,它的效果非常好,而且我认为它可以达到您所有5个目标......
答案 9 :(得分:0)
查看您的优先级列表,很难说任何一条路线都是“正确”的路径。在PHP方面,我花了很多时间在CakePHP上完成了你想要的大部分工作。但作为一个讨厌PHP的人,我建议在这个领域中避开任何东西。
关于风格和体验。我使用过Ruby On Rails,它不是最优雅的语言,但它的工作非常出色。它还没有像在Java上使用Spring / Hibernate堆栈那样成熟,也没有使用直接处理几乎所有东西的.Net,但它的工作非常出色。我更喜欢基于Java / .Net的项目,因为它更符合我喜欢编程的方式。
没有“正确”的答案,只有很多好的答案。以ASP.Net MVC为例是个不错的选择。永远以前我在Java上使用了Spring,它在完成这项工作方面也相当有效。即便是PHP也不是错误的选择。 Ruby On Rails,我只做了两个项目,非常容易上手,而且在其他语言中做一些相当复杂的任务相当简单。
答案 10 :(得分:0)
我认为,对于大量的文档,你无法击败J2EE。它也被认为具有疯狂的可扩展性和稳定性。
现在,从那里开始真正令人满意....
答案 11 :(得分:0)
如果Java在您的工具包中,请查看Stripes。
岩石稳定,热情,虽然没有一个非常大的社区。好的文档,有些过时了,但系统是如此稳定,即使“旧东西”是相关的。一本真正不错的,最近的(去年末)书。条纹足够小,本书可以并且确实“涵盖了一切”。这是一个动作框架,在演示区域没有太大作用(主要是为表单保存,它有一个完全可选的模板/布局工具)。您可以使用JSP或FreeMarker,或者其他任何东西。它也可以做网络服务(虽然不像泽西岛那样)。
它是后端不可知的,但它有一个JPA集成项目。
最后,如果您愿意,可以根据需要利用所有其他Java / Java EE工具包。由于Stripes不会消耗整个堆栈,因此您可以灵活地选择所需的部件。全船Java EE,交易,会话豆,JMS。适用于Spring(它是“意识到”Spring并且具有良好的集成性)JPA,iBatis,Hibernate,原始JDBC,Lucene,JSR-170内容存储库等等。
这是一个很棒的工具包。
答案 12 :(得分:0)
对于2014年的答案,我会推荐Laravel / Slim Framework(PHP),Ruby on Rails / Sinatra(Ruby),Django / Flask(Python),Grails(Groovy,基于JVM的语言),Play!框架(Java / Scala)或Sails.js / Kraken.js(Javascript)。
所提到的第一个框架稍微大一点,而第二个框架对于使用&#34; /&#34;提及2个框架的语言来说有点小。
我希望这能帮助5年后有类似问题的人。
答案 13 :(得分:-1)
尝试cppcms
这是一个高性能的Web开发框架