什么是文档齐全,稳定,安全,可扩展的Web应用程序框架?

时间:2009-05-21 14:00:29

标签: language-agnostic web-frameworks

我们正在为我们公司构建一个RESTful API,它将提供XML,JSON和其他可能的内容类型。

我的团队正在寻找一个框架(按优先级排序):

  1. 记录良好
    • 理想情况下,有良好的教程,繁荣的社区和知识库
  2. 遵循合理的设计模式
    • 我们大多希望在框架中保持一致性。根据您正在调用的方法调用而不会更改的命名约定。
  3. 安全
    • 专注于强制开发人员对GET,POST,PUT和DELETE变量进行某种形式的验证
  4. 稳定
    • 这部分是成熟的,因为框架不会经常改变
    • 另一部分是一个记录良好的错误列表,并不是非常庞大的
  5. 可扩展/以性能为导向
    • 我们有超过50,000名用户,他们需要全球各地的高可用性。如果我们的应用程序发生故障,人们的家中就没有互联网。所以这是一个非常关键的环境。
    • 理想情况下,我们可以在10台服务器上启动相同的代码库,并继续添加负载均衡器。我们不希望必须定义哪个服务器在哪个方法....
  6. 与Linux / MySQL环境很好地集成
    • 我们没有一台MS服务器。我们没有改变这一点。对不起.Net粉丝:-D
  7. 我意识到这是一个模糊的目标。没有任何一个框架可以满足所有这些需求,事实上可能会有许多框架以不同的方式,形状和形式来满足它们。

    这与语言无关。我们已经拥有PHP经验,但我们也有开发人员从未在他们的生活中编写过Web应用程序,因此学习Python或Ruby或Java是可以接受的。

14 个答案:

答案 0 :(得分:5)

我会在这里发表意见并用 Sinatra建议Ruby。

为什么?

  1. Sinatra没有“有据可查”,但“记录良好”。考虑到它比其他框架简单得多,因此不需要那么多文档,并且因为它是作为Web服务器构建在Rack上的,所以它与它共享一些通用文档。但是你需要知道的是在网站上,并且它写得很好并且没有我发现的错误(IE,它都是最新的)。

    您需要知道的大部分内容都在Sinatra BookReadmeFAQ中。尽管该书正在进行中,但其内容非常准确和有用。并且,如果您仍然遇到问题,请访问IRC聊天室freenode.net#sinatra。

  2. Sinatra能够用于基于功能/路由的逻辑方法,或者通过覆盖Sinatra :: Application对象。您可以使用其中之一,将逻辑和方法拆分为各种文件,或将其全部保存在一个文件中。这完全取决于你。

  3. Sinatra本身就是安全的。您必须验证用户发送的所有变量,因为除了解析它们并将它们传递给您之外,Sinatra并不关心它的有效性。因此,您要么强制执行变量的有效性,要么后悔它。 ;-)

  4. Sinatra在过去的四个月中没有改变过一堆,但肯定有维护和小更新。另外,我没有发现bug列表很大或有威胁。它几乎拥有我用来构建应用程序所需的一切。

  5. Sinatra不必与Passenger一起部署,但可以轻松定制以便快速定制。如果您使用Enterprise RubyThin之类的内容,则可以代理Nginix或LightHTTPd。如果您使用了两台服务器,您可以将其中一台服务器(使用代理和多个线程),第二台服务器(使用MySQL和许多线程),让它们松散。这样,任务分布在服务器上。它会给你比我想象的更多的控制权。 (更不用说更好的表现了。)

    我发现Passenger(在Dreamhost上)与Rack,Mongrel或Thin运行线程相比,性能相对较差。也就是说,一旦加载,应用程序即使在该环境中也能响应。如果我要预测它,你就不会有缩放应用程序的问题,因为你只需要重新部署你的代码并重新启动线程 - 没有什么不能放入Capistrano。

  6. Ruby on Linux很快,并不是一个实现的问题。使用Ruby的MySQL非常简单,并且有一些非常好的ORM包可用,如ActiveRecordSequel。 Sinatra不会让你选择一个你讨厌的人。

  7. 除了问题的答案之外,我还有其他一些原因。

    1. Sinatra有一个简单的学习曲线,很容易上手。我遇到的最大问题是将它放到我的Dreamhost服务器上,因为Rack是旧版本,但是随着Rack的销售版本问题消失了。如果可以的话,我会用ActiveRecord在Sinatra中重写我最新的Rails项目,以便让我自己轻松维护;已经花了太多精力。

      由于其易用性和易学性,我发现自己在没有代码生成器的Sinatra中比在所有代码生成器的Rails中更高效。那是在说些什么。

    2. Sinatra支持Rack的中间件,因此您可以非常灵活地使用它。

    3. 如果我要在IRC上平衡Sinatra社区的帮助,我会说他们比一般的Rails用户更了解框架 - 就像粗略的比较一样。原因是新手和没有商业编程的人更容易使用Rails。

    4. 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开发框架