`
myan
  • 浏览: 13602 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

REST:Rails 1.2的意义,以及一个翻译接力的发起

阅读更多
    昨天,David H. Hansson在 www.rubyonrails.org 上发布了Rails 1.2 RC1。之前Rails的版本在1.1.6上停留了4个月,有人已经不耐烦地在讨论组上质问Rails 1.2为何拖了这么久。拖这么久当然是有原因的,Rails 1.2是一个重大的升级,可以说其核心思想发生了巨大的、根本性的变化,以至于著名的《敏捷Web开发》第二版,在临近脱稿之时,不得不进行大幅度的调整,从而把出版日期一拖再拖。

    Rails 1.2的主要亮点是REST。可以这样说,经过这次升级,Rails成为第一个把REST作为核心思想的主流Web框架,从而把其他的竞争性的敏捷Web开发框架又一次抛在了身后。在RIA的曙光已经从地平线下面露出来的时候,Web的全面service化已经不是个遥不可及的事情。记得2000-2001年,以微软为首的一些大公司鼓吹Web Services,当时有人认为2003年各大网站就会急急忙忙地向Web Services迁徙。但历史证明,公众互联网站根本不认同这个方向,预见中的Web Services大跃进没有出现。Web Services使得网站的服务既可以通过页面来发布,也可以通过可编程的Web Services API形式发布,这本身是很好的事情,为什么人们不接受呢?原因固然是多方面的,但是互联网社群不接受为企业应用量身定做的、笨重累赘的SOAP/WSDL/UDDI,是不可忽略的因素。这个时候,一种新的Web Services模型就开始引起人们的注意。2000年,著名的Web技术专家、HTTP等诸多Web协议的主要起草人Roy Fielding从加州大学Irvine分校获得博士学位,其博士学位论文中描述了一种分布式软件的体系结构风格,被称为REST。这种风格完全符合已经建立起来的Web体系结构,并且具有天然的简单性、可延展性。自此之后,REST成为SOAP之外另一种主流的Web Services实现模型。很快,人们发现,开发者更加偏爱REST模型.eBay、Amazon等巨型网站早在2004年就发现,大约有60%的Web Service客户通过REST来使用它们所提供的网络服务,此后这个比例一直在增加。那么,REST到底是什么东西呢?

    简而言之,REST代表“具备表像的状态迁移(REpresentational State Transfer)。注意,我把representation翻译为表像,是为了更好地表达其本意,如果按字面翻译,应为“表现”。REST这样理解Web:Web是资源的集合,每一个资源都有一个或多个URI无疑义地引用。REST软件构件可以获得某项资源的一个“表像”,从这个表像中,REST构件可以了解到该资源的当前状态,从而在该项资源上实施恰当的操作,并且可以把这个表像传递给其他的REST构件。当REST构件在该资源上实施了某些操作之后,将导致该资源的状态发生迁移,从而获得新状态的表像。这种解释当然是比较晦涩的了。但换一种说法大家就会非常清楚。当我们在浏览Web页面的时候,这个Web页面就是Web应用当前状态的表像,而我们和我们的浏览器一起构成了一个REST构件。当你在Web页面上执行某项操作(点击链接、提交表单,等等),你就是“在某个资源上实施了一个操作”,就会导致系统的状态发生迁移,迁移到另一个状态中,而新的状态以新的表像(页面)展示给你。这不正是我们每天都重复几百上千次的事情吗?所以我们用REST已经十多年了。只不过,Roy Fielding在其论文中表明,REST其实是一种分布式软件的通用风格,可以被用来构建相当广泛的互联网应用。

    Roy Fielding对REST的深刻理解直接影响到HTTP协议的制定。在1999年完成的HTTP 1.1(RFC2616)中,HTTP增加了PUT、DELETE两个命令,从而使HTTP的主要命令扩充为四个(GET、POST、PUT、DELETE,未将次要命令如OPTION、HEAD等计入)。Roy Fielding认为,这四个命令不多不少恰恰能完成REST风格的应用。换言之,只要有这四个动词,就可以在REST范围内做出任何想要的分布式应用。这是多么令人惊讶的结论!我们在平时的面向对象设计中,通常要给每一个对象定义的动作(方法)都不少于四个,而REST却断言,四个就够了,多一个浪费,少一个不行。如果Fielding博士是对的,那么互联网上的编程工作就可以大大简化,HTTP体系下天生的轻便、灵活、简单、可扩展的特性都唾手可得。

    然而,遗憾的是,尽管HTTP很流行,四个动词的语义清清楚楚地写在RFC2616里面,但真正很好地理解了其中含义的人却非常少。世界上充满了不求甚解就撸起袖子蛮干的聪明人,所以浏览器出现已经十多年了,却还是只支持GET和POST两个方法,这使得REST的推行不能一帆风顺。

    Ajax的出现标志着RIA时代逐渐走来,客户端将不再是清一色的HTML页面,也可以是一个Ajax的程序,通过XMLHttp向服务器发起PUT和DELETE请求。这样,就要求服务器端在四动词的背景下重新思考应用的构造。传统上,服务器端应用只是通过REST风格将部分服务暴露出来。而Rails 1.2则直接将REST直接作为构建整个Web应用的中心,这才是Rails 1.2的独特之处,也是张显Rails社群离经叛道和卓尔不群的地方。为了要采纳REST风格,Rails 1.2革新了Web应用的构造思想,整个领域建模的思想都有所变化。现在整个Rails社群都应当准备向REST时代迁移。

    今年7月份举行的RailsConf 2006上,David Heinemeier Hasson作了一个主题演讲,很清楚地讲了Rails 1.2中对于REST的设计,以及REST风格给Web应用设计思想所带来的革新。我第一次看到这个视频,就认为这可能是对Web服务端开发具有历史意义的一次演讲。当时有一点时间,就一边听一边记,把这个演讲的开头翻译出将近3000字的内容,大约占整个演讲篇幅的1/4。后来我忙了起来,就没有时间把这个翻译做完。这个稿件在我硬盘上爬了两个多月,扔掉也不是,放出来又不完整。现在Rails 1.2已经发布了,我想越来越多的Web开发者都会回过头关心这个演讲的内容,所以突然生出一个想法,能不能把这个不完整的翻译稿放到自己的blog上,请有时间和精力的网友把翻译工作接力下去?

    所以,我已经将自己翻译完成的开头部分放到了blog上,请有兴趣和热情的朋友对照录像内容把翻译接力下去,为国内的Web开发者介绍关于Web开发思想的这一重大革新。
 
分享到:
评论

相关推荐

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    使用Rails构建可伸缩和可维护API的最佳方法

    swagger_yard-rails:Rails引擎为Swagger UI解析和呈现json

    SwaggerYard :: Rails SwaggerYard :: Rails gem是一个Rails引擎,旨在使用SwaggerYard解析您的Yardocs API控制器。 它将创建一个Swagger-UI投诉JSON,以通过安装SwaggerYard :: Rails :: Engine的位置提供。安装将...

    跨越边界:REST on Rails

    Ruby on Rails是一个突然流行...本文介绍Rails中的Web服务,重点放在一个名为Representational State Transfer (REST)的策略上。本文介绍了如何在Ruby on Rails中添加REST风格的Web服务,并从Ruby和Java代码调用服务。

    java源码:Rails3消息队列系统 Sidekiq.zip

    java源码:Rails3消息队列系统 Sidekiq.zip

    foundation-rails:Rails基础

    基金会::铁路 Foundation :: Rails是一颗宝石,可以在即将到来的Rails...运动界面是一个Sass库,用于创建灵活的UI过渡和动画,并且与foundation-rails gem打包在一起。 要使用Motion UI,请取消注释foundation_and_o

    跨越边界:Rails迁移

    目前,持久性框架使用两种方法中的一种:映射或包装 。要有效地管理涉及持久性域模型的应用程序变化,必须协调数据、模式和模型...这篇文章研究的Rails模式迁移是一种把每个数据库的模式变化与基本对象模型分离的思想。

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...

    rails_multisite:Rails应用的多租户

    安装将此行添加到您的应用程序的Gemfile中: gem 'rails_multisite'然后执行: $ bundle或将其自己安装为: $ gem install rails_multisite用法配置需要一个名为config/multisite.yml的文件,该文件指定所有数据库...

    rails_best_practices:Rails项目的代码度量工具

    rails_best_practices rails_best_practices是用于检查Rails代码质量的代码度量工具。 它支持以下ORM / ODM: 活动记录 蒙古型 mongomapper 以及以下模板引擎: erb 哈姆 减肥 拉布尔 rails_best_practices...

    应用Rails进行REST开发

    除了这两个,http协议还知道 put和 delete 方法,这两个方法告诉服务器创建或者删除一个WEB的资源. 这个教程的目的,就是扩展开发人员的视线,去了解http协议的 put 和 delete 方法.我们常说的 REST 这个术语,精华就是 ...

    graphiql-rails:在 Rails 应用程序中安装 GraphiQL 查询编辑器

    GraphiQL-Rails 在 Ruby on Rails 中挂载 。 安装 添加到您的 Gemfile: gem "graphiql-rails" 用法 安装引擎 将引擎添加到routes.rb : # config/routes.rb Rails . application . routes . draw do # ... ...

    Rails Tips: Rails docs with Jamis template

    附上Jamis的rdoc模板文件,tar解压即可。 博文链接:https://lgn21st.iteye.com/blog/199681

    prawn-rails:一个插件,可与rails无缝使用prawn库

    prawn每当用户请求带有'pdf'扩展名的页面时将使用用法 基本用法 Prawn :: Rails旨在仅在Prawn自身周围提供一个非常薄的包装。 Prawn :: Rails视图应该只包含对函数prawn_document的调用和一个块。 这将创建一个...

    rails_admin_enum4:Rails Admin Rails 4.1枚举

    Rails Admin枚举4 Rails Admin插件,用于正确查看Rails 4.1枚举 安装 gem 'rails_admin_enum4', github: 'sibext/rails_admin_enum4' bundle install 用法 通过生成器生成新模型: rails g model Sibext service:...

    bootstrap-modal-rails:Rails gemified bootstrap-modal 扩展

    Bootstrap::Modal::Rails 为默认类提供的 Rails Asset Gem安装将这些行添加到应用程序的Gemfile : ### Rails 3 or previousgroup :assets do gem 'bootstrap-modal-rails'end### Rails 4gem 'bootstrap-modal-rails...

    make_taggable:Rails的高级标记

    可标记 MakeTaggable是Rails应用程序的标记宝石,它允许沿动态上下文进行自定义标记。安装要使用make_taggable,请从应用程序的根目录运行followingng: bundle add make_taggable安装后安装迁移rails make_taggable...

    acts_as_privilege.rb:Rails 的简单权限解决方案

    Acts as privilege 是 Ruby on Rails 的一个插件,它提供了将控制器操作限制为特权资源的功能。 这种基于 ACL 的安全模型被设计为基于角色的访问控制,其中每个角色可以是一组用户。 地位 哲学 只做一件事的通用库...

Global site tag (gtag.js) - Google Analytics