简单的深邃:Sinatra 1.0将至

自2007年末发布以来,轻量级的Web框架Sinatra便吸引了众多开发者的目光。现在,在Google中搜索关键字“Sinatra”,第一位便是Sinatra Web框架,比Frank和Nancy还要多。InfoQ采访了Sinatra项目的创始人Blake Mizerany,来了解更多关于Sinatra的信息和1.0版本的发布日期。

Mizerany指出:1.0版本的价值,并不是因为新功能的增加,而是由于旧功能的移除:

现在我们使用的是 Tilt模板,这个工具能够快速地生成大部分的代码。扩展API已经确定,在0.9版中决定废弃的API也已经全部移除了。

否则代码就和之前的发布版本很相似了。

和Rails不同的是,Sinatra并不是一个MVC框架;相反地,人们将其描述为“一种使用Ruby创建Web应用的领域专用语言”。它提供了一种简单的方式,来帮助开发者使用REST范式去响应HTTP请求:

Sinatra是直接映射到HTTP的。它并非隐藏了复杂性,而是将简单性展示出来。HTTP并不难,HTML也并不难,没有必要去否定它们。直到亲自去尝试一下,人们才会发现看上去很“基础”的东西其实并不那么简单,很难继续深入下去。

Sinatra程序小到可以放到一个文件中,每个route定义由一个HTTP方法和一个URL模式组成。例如,Sinatra的“Hello world”看起来应该是这样的:

require 'rubygems'
require 'sinatra'
get '/hi' do
  "Hello World!"
end

在各种各样的模板系统中(例如Erb、Erubis和HAML),都可以使用Sinatra。但是,它没有一些MVC框架所应该拥有的功能,例如表单构造器和数据库连接层。这种简单性使得它能够在多种Ruby实现上运行,例如Ruby 1.8.x和1.9、JRuby以及MacRuby等等。

Sinatra in the Wild页面按时间顺序记录了Sinatra的使用者,列出了大量使用此框架的Web应用和站点。包括GitHub和Gemcutter,还有Heroku、Engine Yard以及ENTP这些公司。最近NewRelic也宣布在其RPM Ruby Agent性能监视工具中采用Sinatra。

Sinatra 1.0也引入了一些新的功能。Sinatra在模板渲染中采用的是Tilt框架,从而可以支持模板缓存、一致性模板堆叠和新的模板引擎。Erb、Erubis和HAML模板现在只是在第一次使用的时候才编译,因此在渲染性能上有5到10倍的提升。不仅如此,还可以通过一个新的标志来控制每次请求时模板文件是否从磁盘上重新读取并重新编译。

用户在升级的时候可能会遇到一些小问题,需要注意如下问题,参见FAQ:

如果你一直跟随着官方文档的脚步,并且废弃掉了文档中提及需要废弃的功能,你的程序在Sinatra 1.0下将会工作的很好。但是最新发布的Sinatra 0.9.x版中一些功能在1.0版中会警告已经废弃。 [..] 在Sinatra 0.9.x版中也修正了一些安全隐患以及缺陷,但是没有加入新的特性。

Sinatra 1.0版的开发进度缓慢的原因,是其采用了语义版本模型:

所有的1.x版都会向后兼容最初的1.0版。我们在很长一段时间内不会修改1.0的特性,所以我们不需要对接口的变化情况进行监控和检查。

当谈及到将来的时候,Mizerany预测Sinatra将会持续地受到关注:

Sinatra的简单性能够让开发者去做想做的事情。我们想继续保持简单,而且也非常好奇这样发展下去到底会怎样。我们不会通过秘密的IRC或者Campfire聊天室来决定Sinatra的下一步计划,所有的计划都是公开的。

Mizerany尤其称赞了Sinatra对扩展的支持,他说:“没有特定的标准库或者初始脚本,它们仅仅是一些程序库而已,可以作为第三方库或者像gems一样去使用。” 大量可用的Sinatra扩展能够完成诸如通过ActiveRecord和数据库交互、Sequel ORM、验证以及异步任务等功能。

Sinatra的思想也为众多其他相似的框架带来灵感,包括Javascript的Sammy、Clojure的Compojure,以及Scala、PHP、.NET和其他语言的框架。Heroku也是Sinatra开发的支持者:

Sinatra的成功源自社区。Heroku给我时间来支持Sinatra,并且一直在鼓励我前进。社区应该占99.9999%的功劳。每次我在maillist中看到问题的时候,都已经有热心人热情地解答了它。

查看英文原文:Deceptive Simplicity: Sinatra Turns 1.0

你可能感兴趣的:(简单的深邃:Sinatra 1.0将至)