分類
Programming Rails REST

Rails RESTful ActiveResource 先睹為快

在上一篇 Rails RESTful 相關工具 中有提到,ActiveReource 是一個針對 Rails RESTful APIs 所用的 client-side XML consumer,我們花了好幾篇學習為何 RESTful 跟如何用 map.resources 來架出 server-side provider,而具體的重大好處則會在 ARes 中體現出來,我們可以像對 ActiveRecord 的物件操作一樣來處理 ARes,只是它的內部運作對象變成 Resource 而不是 Database (你感覺不到你在用Web APIs :p)。

讓我們來試玩看看吧! 因為不只連 Rails 1.2 還沒 (最後關頭拉出 :p),連 Edge Rails 版都還沒有,所以必須直接用 svn co

svn co dev.rubyonrails.org/svn/rails/trunk vendor/rails

我們用 irb 來開始實驗吧~

$ irb
> require ‘vendor/rails/activesupport/lib/active_support’
> require ‘vendor/rails/activeresource/lib/active_resource’

上回也提到 beast 是個用 RESTful 開發的討論區軟體,所以我們用 beast 來做操作對象:

分類
Programming Rails REST

孟岩談 Rails 1.2 的意義

心血來潮去對岸找找有沒有Rails RESTful相關文章,發現孟岩的這篇文章值得一看,他點出了 Rails RESTful 所帶來的重大意義。

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

其中的重點如下:

分類
Programming Rails REST

Rails RESTful 相關工具

Update(2008/5): 事隔一年多,我對於 RESTful Rails 有完全不同的切入點,詳見 Practical Rails2 投影片。本篇的 Resource Generator 和 simply_helper 皆已內建在 Rails2 中。

Rails RESTful  第四篇,我在這裡做些 Rails RESTful 工具介紹,相關文章有 REST tools for Rails 1.2

Resource Generator

Rails 的 Generator 是最立即的學習教材,因此 RESTful 版的 generator 也有了,除了產生 model, controller, views, tests 之外,連 migration 也會產生。

ruby script/generate scaffold_resource person name:string age:integer created_at:datetime birthday:date

分類
Programming Rails REST

Rails RESTful 實作

Update(2006/12/4): 一些小修改跟 link_to 的 web accessibility 補充。

Update(2006/12/11): 請接著看系列文章下一集: Rails RESTful 相關工具

Rails RESTful 彈第三篇,我想 David Heinemeier Hansson 的這篇投影片是很好的開場白:  Discovering a world of Resources on Rails

本來這篇想寫的仔細點,不過後來我發現AWDwR第二版講 Resource-Based Routing 的頁數還不少(十幾頁吧,還蠻詳細的),要用 Rails 的人應該都去買一本,我想我這裡就不巨細靡遺了… :p

在 Rails 中是如何實作 RESTful 支援的? 首先是在 Resource Routes 上,在 routes.rb 加入

map.resources :users

這樣的宣告將在自動對應 URL路徑跟 Controller 的 action ,而有以下的結果 :

GET: /users => [:action => ‘index’]
GET: /users.xml => [:action => ‘index’, :format => ‘xml’]
GET: /users/1 => [:action => ‘show’, :id => 1]
GET: /users/1;edit => [:action => ‘edit’, :id => 1]
GET: /users/1.xml => [:action => ‘show’, :id => 1, :format => ‘xml’]
POST: /users => [:action => ‘create’]
PUT: /users/1 => [:action => ‘update’, :id => 1]
DELETE: /users/1 => [:action => ‘destroy’, :id => 1]

也就是使用 named routes 來實作出 verb-oriented controllers,單一個 resource 根據 HTTP verb 而有不同的行為。

分類
Programming Rails REST

RESTful Design 雜談

看了上一篇可能會有些混淆: 整個 Wide World Web 可以概觀看成 REST 架構,但是微觀看 Web 就不完全是了。來看看 Rails 的 URL routes 設計: 指定Controller之後指定action,基本上它是個程序性(procedural)的框架,我們利用URI syntax來決定執行什麼動作。然而 Web 基本上不是個 procedural 環境,而是 RESTful 的,但是就像你在物件導向的環境中仍然可以寫 procedural code,你也可以在 RESTful 環境中作 procedural,只是很不幸的會失去一些RESTful的優點而已。

不過這不表示Rails不夠好,事實上目前任何 web application 框架要成功,都必須支援 procedural 的開發,這是因為基本上目前存在的主流框架都是 procedural 的,人們也都習慣於procedural開發。目前的潮流只有在部分需要做 web service 的地方,會在SOAP之外另外提供REST方法(提供XML格式),在整個網站上使用RESTful仍不多見。因此除非看到有人率先做出成功的RESTful 網站吧,雖說 RESTful is right way,但是它的觀念與大家已經會的 procedural 有著根本上的差異,所以這種改變跟限制到底能提供多少實際好處呢? anyway… 走在時代尖端的 Ruby on Rails 註定會走這對的一步 (事實上是併行: 你可以用本來的方法設計,也可以用RESTful方式)。 

分類
Programming Rails REST

什麼是REST跟RESTful?

Update(2008/5): 事隔一年多,我對於 Rails 如何應用 RESTful 這個概念有完全不同的切入角度,詳見 Practical Rails2 投影片。

Ruby on Rails 1.2 的一個重要進展是 RESTful,在了解怎麼用之前,我們要先了解什麼是 REST(Representational State Transfer)?

什麼是REST?

REST 是一種分散式超媒體系統(如WWW)的軟體架構風格,你可以想像它是一個良好設計的Web應用程式規則: 一組網路Web頁面(虛擬的狀態機器),其中 Client 透過點選超連結(狀態變換),結果是下個Web頁面(表示應用程式的下一個狀態)。

REST 所描述的網路系統包括三個部份:

  • data elements (resource, resource identifier, representation)
  • connectors (client, server, cache, resolver, tunnel)
  • components (origin server, gateway, proxy, user agent)
  • 幾個重點:

  • Data elements 由標準化介面存取
  • Components 透過介面傳輸 資源表徵 (representations of resources) 來溝通,而不是直接操作資源本身。
  • Connectors 提供 component 的抽象介面來溝通,隱藏溝通機制的實作細節。
  • Components 使用 connectors 來存取,connectors 提供資源的存取或居中。
  • 所有來自 connector 的 requests 必須包含所有必要的資訊來了解該 request,不需要依靠之前的request (即 stateless)