下一頁 1 2 3 4 5
過去的 20 年間,一個趨勢主導了商業軟件工具的開發:用復雜性對抗復雜性。這一趨勢在任何地方都沒有比在分布式計算領域更明顯。C 和 Java™ 社區已經看到一些驚人復雜的框架被構建出來支持分布式通信。
分布式計算環境(DCE)支持用 C 語言編寫的應用程序之間的遠程過程調用。公共對象請求代理架構(CORBA)標準支持面向對象應用程序之間的通信。企業 JavaBean(EJB)規范提供安全性、持久性、事務、消息和遠程的服務。對各個框架的宣傳甚囂塵上,但是這些框架都沒有滿足預期,有些甚至因為它們的復雜性而成為災難。在這些框架中,只有 EJB 3.0 屬于大力簡化的結果,有潛力在分布式應用程序上成功。市場可能給、也可能不給這個面臨強敵的框架另一個空間,但 EJB 仍然需要交付使用。
最新的大型分布式框架是 Web 服務。Web 服務技術讓應用程序可以用平臺獨立或編程語言獨立的方式相互通信。Web 服務標準也受到復雜性惡魔的威脅,但是稱作 REST 的替代策略承諾了更簡單的方式。本文介紹了如何在 Ruby on Rails 中添加 REST 風格的 Web 服務,并從 Ruby 和 Java 代碼調用服務。
![]() |
|
就像 EJB、CORBA 和 DCE 一樣,Web 服務的核心抽象也是遠程過程調用。Web 服務利用叫做 SOAP(最初,SOAP 代表簡單對象存取協議,但是這個術語現在降級了)的協議,用 XML 表示消息的結構。這里有一個技巧:如果協議用代表簡單的 S 開始,那它就不簡單。Web 服務定義語言(WSDL)提供了服務的標準規范。像 SOAP 一樣,WSDL 也是一個棘手而復雜的 API,而 SOAP 和 WSDL 僅僅涉及到了構成 Web 服務這個大怪物的眾多 API 的表面。Web 服務需要一次大修,感謝 Roy Fielding 的一份有影響的博士論文,Web 服務得到了大修。
Fielding 的論文描述了 REST 應用程序聯網策略。REST 與全堆棧 Web 服務根本不同,主要原因有三個:
請把 REST 想像成瀏覽。REST 客戶使用與瀏覽器相同的 HTTP 命令訪問資源。當 REST 客戶訪問到資源的表示時,客戶轉換到一個狀態。使用不同的 HTTP 命令,REST 客戶可以創建、讀取、更新或刪除資源的記錄。
例如,以典型的博客為例。通過輸入 URL,例如 blog.rapidred.com,得到貼子的列表。然后,如果想編輯博客條目,可以在 URL 中輸入 HTTP 參數(例如 blog.rapidred.com/edit?article=12345),然后顯示編輯表單。由于每個博客條目都有自己的 URL,所以點擊鏈接或直接輸入 URL,就可以用 HTTP 命令讀取、修改或刪除內容。
簡而言之,REST 可以:
Ruby on Rails 用 REST 對 Web 服務提供了優秀的支持。
Rails 用叫做 Action Web Services 的模塊實現 Web 服務。許多開發框架鼓勵視圖和 Web 服務使用獨立的控制器。這個策略可以維護控制器之間的風格一致。問題是針對所服務的每種內容,都需要一個新控制器。例如,Ajax 用戶界面要求從控制器取得到 JavaScript 的遠程 XML 調用。
不必為 Web 服務專門分配一個控制器,使用 Rails,可以通用地用同一個控制器向基于 HTML 的視圖、基于 XML 的 Web 服務和基于 XML 的 JavaScript 組件提供內容。理解 Action Web Services 的最好方式就是在工作應用程序的環境下查看它的實際作用。
請用自己選擇的數據庫管理器創建一個叫做 service_development
的數據庫。接下來,用以下命令創建 Rails 項目和模型:
|
在生成模型之后,就有了一個叫做 db/migrate/001_create_people.rb 的遷移。請把這個遷移編輯成像清單 1 一樣:
|