6

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

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

  1. 有据可查
    • 理想情况下,拥有良好的教程、蓬勃发展的社区和知识库
  2. 遵循合理的设计模式
    • 大多数情况下,我们希望框架保持一致。不会根据您调用的方法调用而改变的命名约定。
  3. 安全的
    • 专注于强制开发人员对 GET、POST、PUT 和 DELETE 变量执行某种形式的验证
  4. 稳定的
    • 部分原因是成熟度,因为框架不会经常变化
    • 另一部分是一个有据可查的错误列表,它并不大
  5. 可扩展/面向性能
    • 我们在全球拥有超过 50,000 个需要高可用性的用户。如果我们的应用程序出现故障,人们的家中就没有互联网。所以这是一个非常关键的环境。
    • 理想情况下,我们可以在 10 台服务器上启动相同的代码库,然后继续添加负载均衡器。我们不想定义哪个服务器在哪个方法上......
  6. 与 Linux/MySQL 环境完美集成
    • 我们没有单一的 MS 服务器。我们不会改变这一点。对不起.Net粉丝:-D

我意识到这是一个模糊的目标。不会有任何一种框架可以满足所有这些需求,实际上可能会有许多框架以不同的方式、形状和形式满足它们。

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

4

14 回答 14

5

我会在这里冒险并建议 Ruby 与Sinatra一起使用。

为什么?

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

    您需要了解的大部分内容都在Sinatra 手册自述文件常见问题解答中。尽管这本书的工作正在进行中,但它的内容非常准确和有用。而且,如果您仍然遇到问题,请访问 IRC 聊天室 freenode.net#sinatra。

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

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

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

  5. Sinatra 不必与Passenger 一起部署,但可以轻松定制以提高速度。如果你使用Enterprise RubyThin之类的东西,你可以代理到 Nginix 或 LightHTTPd。如果您使用两台服务器,您可以将一台作为主服务器(使用代理和多个线程),将第二台作为数据库服务器(使用 MySQL 和许多线程)并让它们松动。这样,任务就分布在服务器上。它会给你比我想象的Passenger更多的控制权。(更不用说更好的性能了。)

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

  6. Linux 上的 Ruby 速度很快,实现起来也不成问题。使用 Ruby 的 MySQL 很简单,并且有几个非常好的 ORM 包可用,比如ActiveRecordSequel。Sinatra 不会让你选择一个你讨厌的。

除了你的问题的答案,我还有几个原因。

  1. Sinatra 的学习曲线很简单,而且很容易上手。我遇到的最大问题是将它安装到我的 Dreamhost 服务器上,因为 Rack 是旧版本,但是使用 Rack 的供应商版本,问题就消失了。如果可以的话,我会用 ActiveRecord 重写我在 Sinatra 中的最新 Rails 项目,以便于自己进行维护;已经花费了太多的精力。

    由于它易于使用和易于学习,我发现自己在没有代码生成器的 Sinatra 中比在具有所有代码生成器的 Rails 中更有效率。这说明了一些事情。

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

  3. 如果我要平均一下 Sinatra 社区的帮助,在 IRC 上,我会说他们比普通的 Rails 用户更了解该框架——只是作为粗略的比较。原因是 Rails 更容易被新手和没有业务编程的人使用。

  4. 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 也会帮助提高速度。

于 2009-05-22T22:09:14.463 回答
4

Django 和 Rails 都非常接近您的大多数标准,除了我认为 Django 的文档Ruby on Rails 的文档要好得多;Django 的文档简直太棒了(我不是在这里夸张)。

不过,我不知道 Django 的可扩展性。我知道 Rails 的扩展性很好(在一定程度上),但我不知道 Django 是否也可以这样说。(我并不是说它不能;我只是说我真的不知道,因为我从来没有使用 Django编写过大型应用程序。)

Django 也有一匹小马,以防你也暗中想要它。

于 2009-05-21T14:20:08.173 回答
3

出色地。可扩展性并非易事。对于类似 Google 的响应时间,您需要类似MapReduce的东西。好的。不要自欺欺人,超级可扩展性对初学者来说毫无意义。

至于所有其他点,Seaside显然是最好的。至于安全性,请查看seaside.st以了解为什么它本质上比我所知道的所有其他框架(包括 Rails 和 Seam,例如)更安全。Seaside 的文档相当完备,而且查看 seaside 的内部结构也非常简单方便,几乎没有一个问题可供社区回答,通常情况下它会很快回答。Seaside 多年来一直很稳定,所以我想你会没事的。

至于面向性能:运行商业 Seaside,GLASS,与类似 LAMP 的设置相比,您将获得惊人的性能,因为集成了更快的数据库解决方案,以及以内存换取速度并获得大量性能的框架速度。

Seaside 的架构非常好,以至于许多人发现编写 Seaside 应用程序比桌面应用程序更容易。试试看,你会喜欢的。

PS:作为记录,Seaside 不是 RESTful。

于 2009-05-21T14:19:18.097 回答
2

你可以看看 Django, Python 框架。这是一个文档齐全的框架,它在数据库上有一个自动 CRUD 管理员界面,它还有一本免费的在线书籍,当然你可以真正购买 :)

于 2009-05-21T14:24:24.640 回答
1

试一试,找出正确答案!

好吧,那些会建议“一个框架来统治他们所有人”的人也不会尝试所有这些!

于 2009-05-21T14:06:11.743 回答
0

我认为就绝对数量的文档而言,您无法击败 J2EE。它也被认为具有疯狂的可扩展性和稳定性。

现在,从那里到真正令人向往......

于 2009-05-21T14:20:18.190 回答
0

我想如果有这样的框架,那将是唯一的。

于 2009-05-21T14:05:00.683 回答
0

对于 PHP,我喜欢 Zend 框架(尽管对我来说它并不是一个真正的框架)。它的最佳功能之一是每个组件都独立于其他组件......因此,如果您不喜欢其中的某些部分,请不要使用它。另外,您提到了 JSON ...... Zend 完全支持两个方向的 JSON ......

于 2009-05-21T14:07:20.523 回答
0

Ruby on Rails 包含大量插件的大量文档,并且已经在可扩展性方面进行了测试(请参阅 BaseCamp 和其他在 rails 中制作的解决方案)

于 2009-05-21T14:12:33.557 回答
0

如果您正在考虑使用 Java,我会推荐Jersey,它效果很好,我认为它可以达到您的 5 个目标......

于 2009-05-21T14:14:56.653 回答
0

查看您的优先事项列表,很难说任何一条路线都是“正确”的方式。在 PHP 方面,我花费了大量时间使用 CakePHP,它完成了您所寻找的大部分工作。但作为一个讨厌 PHP 的人,我建议避开该领域的任何事情。

一切都与风格和经验有关。我使用过 Ruby On Rails,它不是最优雅的语言,但它的工作非常出色。它还没有像在 Java 上使用 Spring/Hibernate 堆栈或使用 .Net 那样成熟,后者可以直接处理几乎所有内容,但它的工作非常出色。我更喜欢基于 Java/.Net 的项目,因为它更适合我喜欢的编程方式。

没有“正确”的答案,只有很多好的答案。例如 ASP.Net MVC 就是一个不错的选择。很久以前,我在 Java 上使用 Spring,它在完成这项工作方面也相当有效。甚至 PHP 也不是一个错误的选择。Ruby On Rails,我只做过两个项目,它很容易上手,它使其他语言中一些相当复杂的任务变得相当简单。

于 2009-05-21T14:15:40.320 回答
0

如果您的工具包中有 Java,请查看 Stripes。

摇滚稳定,热情,虽然没有一个壮观的大社区。好的文档,有些已经过时了,但是系统非常稳定,即使是“旧的东西”也是相关的。一本非常好的,最近(去年底)的书。条纹足够小,这本书可以而且确实“涵盖了所有内容”。

它是一个动作框架,在演示区域中并没有做太多事情(主要是表单除外,它有一个完全可选的模板/布局工具)。您可以使用 JSP 或 FreeMarker,或者,实际上,其他任何东西。它也可以做网络服务(虽然不如泽西岛)。

它与后端无关,但有一个 JPA 集成项目。

最后,您可以根据需要利用所有其他 Java/Java EE 工具包。由于 Stripes 不会占用整个堆栈,因此您可以灵活地挑选所需的部分。全船 Java EE、事务、会话 Bean、JMS。与 Spring 一起工作(它“意识到”Spring 并具有良好的集成)JPA、iBatis、Hibernate、原始 JDBC、Lucene、JSR-170 内容存储库等等。

这是一个很棒的套件。

于 2009-05-22T21:27:16.153 回答
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)。

对于我提到使用“/”的两个框架的语言,提到的第一个框架要大一些,而第二个框架要小一些。

我希望这对 5 年后有类似问题的人有所帮助。

于 2014-06-10T13:51:26.620 回答
-1

试试cppcms

它是一个高性能的 Web 开发框架

于 2013-08-14T09:43:34.553 回答