基本信息
是由Roy Thomas Fielding
博士在2000年首次提出的。他為我們描繪了開發基於網際網路的
網路軟體的藍圖。REST軟體架構是一個抽象的概念,是一種為了實現這一網際網路的超媒體
分散式系統的
行動指南。利用任何的技術都可以實現這種理念。
今天,HTTP是網際網路上套用最廣泛的計算機協定。HTTP不是一個簡單的運載數據的協定,而是一個具有豐富內涵的
網路軟體的協定。它不僅僅能夠對於網際網路資源進行唯一定位,而且還能告訴我們對於該資源進行怎樣運作。這也是REST
軟體架構當中最重要的兩個理念。而REST軟體架構理念是真正理解HTTP協定而形成的。有了REST軟體架構理念出現,才使得軟體業避免了對HTTP協定的片面理解。只有正確的理論指導,才能在軟體開發的實際工作過程中少走彎路。
資源定位
REST
軟體架構之所以是一個
超媒體系統,是因為它可以把網路上所有資源進行唯一的定位,不管你的檔案是圖片、檔案Word還是視頻檔案,也不管你的檔案是txt檔案格式、xml檔案格式還是其它
文本檔案格式。它利用支持HTTP的
TCP/IP協定來確定網際網路上的資源。
資源操作
REST
軟體架構使用了CRUD原則,該原則告訴我們對於資源(包括網路資源)只需要四種行為:創建(Create)、獲取(Read)、更新(Update)和銷毀(DELETE),就可以組合成其他無數的操作。其實世界萬物都是遵循這一規律:生、變、見、滅。這個原則是源自於我們對於資料庫表的數據操作:insert(生)、select(見)、update(變)和delete(滅),所以有時候CRUD也寫作為RUDI(read update delete insert)。這四個操作是最基本的操作,即無法再細分的操作,通過它們可以構造複雜的操作過程,正如數學上四則運算是數字的最基本的運算一樣。
網路服務
儘管在
Java語言世界中網路服務是以SOAP技術為主,但是REST將成為網路服務的另一選擇,並且是真正意義上的網路服務。基於REST思想的
網路服務不久的將來也會成為是網路服務的主流技術。REST不僅僅把HTTP作為自己的數據運輸協定,而且也作為直接進行數據處理的工具。而當前的網路服務技術都需要使用其它手段來完成數據處理工作,它們完全獨立於HTTP協定來進行的,這樣增加了大量的複雜
軟體架構設計工作。REST的思想充分利用了現有的HTTP技術的網路能力。在德國電視台上曾經出現過一個這樣的五十萬歐元智力題:如何實現網路服務才能充分利用現有的HTTP協定?該問題給出了四個答案:去問微軟;WSDL2.0/SOAP1.2;WS-Transfer;根本沒有。這個問題告訴我們HTTP並不是一個簡單的數據傳來傳去的協定,而是一個聰明的會表現自己的協定,這也許是REST = Representational State Transfer的真正含義。
實際上現在很多大公司已經採用了REST技術作為網路服務,如Google、Amazon等。在Java語言中重要的兩個以SOAP技術開始的網路服務框架XFire和Axis也把REST作為自己的另一種選擇。它們的新的項目分別是
Apache CXF和
Axis2。Java語言也制定關於REST網路服務規範:
JAX-RS: Java API for RESTful Web Services (JSR 311)。相信還會出現更多與REST相關的激動人心的信息。
AJAX技術
儘管AJAX技術的出現才不到兩年時間,但是AJAX技術遵循了REST的一些重要原則。AJAX技術充分利用了HTTP來獲取網路資源並且實現了HTTP沒有的對於異步數據進行傳輸的功能。AJAX技術還使得軟體更好地實現分布性功能,在一個企業內只要一個人下載了AJAX引擎,其它企業內部的人員,就可以共享該資源了。AJAX技術遵守REST準則的應用程式中簡單和可伸縮的架構,凡是採用AJAX技術的頁面簡潔而又豐富,一個頁面表現了豐富多彩的形態。
AJAX技術還使用了一種不同於XML格式的JSON檔案格式,這個意義在哪裡呢?在REST
軟體架構下我們不能對於XML檔案進行序列化處理,這樣程式設計師必須要使用自己的XML綁定框架。而以序列化的JavaScript對象為基礎的JSON已經獲得了廣泛認可,它被認為能以遠比XML更好的方式來序列化和傳輸簡單數據結構,而且它更簡潔。這對REST是一個極大貢獻和補充。
當前的網路套用軟體還違背了REST的“無狀態伺服器”約束。REST伺服器只知道自己的狀態。REST不關心客戶端的狀態,客戶端的狀態自己來管理,這是AJAX技術的套用之地。通過AJAX技術,可以發揮有狀態網路客戶機的優勢。而REST的伺服器關心的是從所有網路客戶端傳送到伺服器操作的順序。這樣使得網際網路這樣一個巨大的網路得到有序的管理。
Rails框架
Ruby onRails框架(簡稱Rails或者Rails框架)是一個基於Ruby語言的越來越流行的網路套用軟體開發框架。它提供了關於REST最好的支持,也是當今套用REST最成功的一個軟體開發框架。Rails框架(從版本1.2.x起)成為了第一個引入REST作為核心思想的主流網路軟體開發框架。在Rails框架的充分利用了REST
軟體架構之後,人們更加堅信REST的重要性和必要性。Rails利用REST軟體架構思想對
網路服務也提供了一流的支持。從最直觀的角度看待REST,它是網路服務最理想的手段,但是Rails框架把REST帶到了網路套用軟體開發框架。這是一次飛躍,讓REST的思想從網路服務的套用提升到了網路套用軟體開發。利用REST思想的simply_restful
外掛程式已經成為了Rails框架的核心內容。
安全性
我們把現有基於SOAP的網路服務和基於REST/HTTP網路服務作個比喻,前者是一種傳統的寄信方式,而後者是現代網路的電子郵件方式。要是寄信和電子郵件都有病毒存在的話,傳統的寄信被送到對方就很危險,而電子郵件是開放的,電子郵件供應商比如Google為我們檢查了電子郵件是否有病毒。這裡並不是說明SOAP網路服務訊息包含義病毒,而是說明HTTP是無法處理SOAP信息包究竟好不好,需要額外的軟體工具解決這一問題,包括
防火牆也用不上和管不了。
REST/HTTP網路服務的
信息包可以被防火牆理解和控制。你可以按照操作和連結進行過濾信息包,如你可以規定從外部來的只能讀取(GET操作)自己伺服器的資源。這樣對於
系統管理員而言使得
軟體管理更為簡單。REST的安全性還可以利用傳輸安全協定SSL/TLS、基本和摘要式認證(Basicund Digest Authentication)。除了這些REST自身的安全性功能外,還可以利用像基於信息的Web ServicesSecurity(JSR 155)作為REST不錯的補充。