REST

REST介紹

博客分類:  REST
以下內容是與某機構的一個約稿的部分,但最後沒有發表,發佈出來,以饗各位REST愛好者學習!文後有Fielding博士的論文和HTTP協議規範,可以下載。 

1.1 REST概念的起源 

隨着全球計算機技術的日新月異,各種新技術層出不窮,在互聯網領域,以谷歌,亞馬遜,雅虎,臉譜等著名互聯網公司爲領袖,掀起了名爲WEB2.0的技術革命。經過了漫長一段時間的摸索前行與總結經驗,WEB2.0技術的發展更加註重WEB技術的效率、簡單性,以及WEB的本質等方面的內涵。 

在當前時期,我們每天都可以看到許時髦的技術名詞,如:Big Data,SOA, cloud computing,REST,Web Service等等,以至於一個WEB技術的初學者看到這些名詞,會陷入一種焦躁的狀態,不知道他們該從何學起,即便是閱讀了一篇技術文章,或者讀了幾本相關的技術書籍,也不一定能抓住WEB技術的本質。WEB的本質是什麼?這就要談到WEB的起源,現代WEB技術基礎的主要是奠基在美國加州大學歐文分信息與計算機科學博士Roy Thomas Fielding的一篇名爲《架構風格與基於網絡的軟件架構設計》的博士論文,要弄清楚WEB的本質,首先應該對這篇論文進行深入的學習和研究。 

Roy Thomas Fielding博士是HTTP和URI等Web架構標準的主要設計者,Apache HTTP服務器的主要開發者。他在他的博士論文裏提出了“架構風格”這個軟件領域的專業術語,推導出一個稱爲“REST”的架構風格,並詳細闡述了REST架構風格的推倒過程,指出不同架構的評價標準就是其背後的的架構風格。值得注意的是,REST指的是一種架構風格的名稱,這裏的風格,不同於我們通常所說的個性化的含義,它代表的一組特徵,在軟件領域我們把它叫做架構約束。 

1.2 REST在軟件架構中的位置 

爲什麼說REST就是現代WEB的本質或基礎?他在我們的軟件架構中處於什麼樣的位置?帶着這些疑問,我們繼續進行探討。 

我們在前面談到,REST其實是Fielding博士提出一種基於網絡的軟件架構設計風格,其英文全稱是“Representational State Transfer”,翻譯成中文爲“表述性狀態轉移”。對REST更通俗的解釋就是:它是軟件架構的一種分類,我們把具有某一組特徵的軟件架構設計稱之爲REST Style。 

REST的一個重要概念是對資源的抽象,資源可以用一個全局的定位符來引用,即我們經常聽到的URI這個網絡術語。爲了維護這些資源,網絡組件之間、服務器端與客戶端之間通過一種標準接口HTTP來交換這些資源的表現。REST最顯著的幾個特徵如下: 

1.網絡上的所有事物都被抽象爲資源。REST把所有網絡的事物都抽象爲資源(Resource)是一個全新的理念,這跟互聯網早期人們認爲:網絡上的事物都是一個文檔、一張圖片有所區別的。這裏的資源是抽象的概念,它可以是北京一天的天氣,新浪網發佈的一篇新聞,微博上一張圖片等靜態的概念,它也可以是銀行的一筆轉賬,github上某開源軟件的一個版本更新這樣動態的概念,它還可以是複數的概念,某電商網站今天最熱賣的五個商品。總之,資源是抽象的概念,它是一個符號,至於它背後所指的是網絡上的什麼事務,這個並不重要。 

2.每個資源對應一個唯一的資源標識符。爲了準確的表達資源這個抽象概念,W3C標準化組織設計一種符號進行資源的標識,這就產生URI標準規範,用URI來標識網絡上的一個資源。 

3.通過通用的連接器接口對資源進行操作。REST架構風格的一個實例就是HTTP協議。HTTP是REST架構中的連接器組件,它用來將軟件組件間的通訊連接起來。從軟件應用層的協議來看,目前基於REST架構風格的 HTTP1.1協議可以說是一統天下。 

4.對資源的各種操作不會改變資源標識符。對於資源的操作時通過HTTP協議來進行的,HTTP上的操作通常使用GET、POST、PUT、DELETE這四種,他們代表獲取資源、創建資源、創建或更新資源、刪除資源四個操作。HTTP的CRUD概念類似於數據庫操作的CRUD操作。CRUD的規律來源於自然世界的“生、見、變、滅”的自然規律。 

5.所有的操作都是無狀態的。REST要求每個客戶端負責保存自己的狀態,服務器應從每次與客戶端的信息中獲得足夠多的內容,以識別客戶端當前的狀態,從而決定給予客戶端怎樣的反饋。 

從上面五個特徵來看,REST正是我們目前接觸的WEB技術的特徵,而實際上支撐整個現代互聯網應用的HTTP1.1協議和URI規範正是由Fielding博士主導設計的,並對其進行了參考實現。因此,對於對於WEB本質的學習,應從REST學起,而落實到具體的技術細節,我們可以從HTTP協議開始。 

對於我們準備或正在構建基於WEB的應用程序或服務,應使用REST架構風格的特徵所導致的架構屬性對架構設計進行指導,從而更加有利於我們構建一個高效的應用或服務,換句話說,REST是WEB軟件架構的設計應遵守的設計準則或設計思想。 

1.3 什麼是RESTful Web Service 

在WEB產生後,人們對WEB產生了濃厚的興趣,以至於各種應用層出不窮,很快基於WEB的B/S結構代替了傳統的基於桌面應用的C/S結構而成爲複雜軟件的主流方案。隨着各應用之間數據交互的日益增多,出現很多新的交互技術,如XML-RPC、JSON-RPC這類應用層面基於HTTP的私有交互協議,慢慢的人們發現各個應用對外提供的服務接口規則不統一,集成起來有許多困難,於是出現SOAP協議,SOAP協議是用來解決服務接口的規範性問題。 
SOAP協議擴展性很好,安全性也考慮的很全面,但是使用起來卻有些複雜,更重要的是在互聯網蓬勃發展的今天,人們越來越認識到追溯WEB的本質,才能創造出簡單而又高效的WEB服務,於是一個新的名詞RESTful web services應運而生, RESTful web services使用RESTful架構風格構建的服務,由於其輕量的特性和在HTTP上直接傳輸數據的能力,在互聯網服務部署技術的選擇上,使用RESTful風格構建服務正在逐漸成爲基於SOAP技術的有力挑戰者。 

1.4 RESTful Web Service規範的發展 

目前,在Java社區,關於RESTful Web Service規範有兩個JSR規範,一個是JSR311規範,另一個是JSR339規範,關於這兩個規範還有另外兩個名字,分別是JAX-RS1.0和JAX-RS2.0。JAX-RS即Java API for RESTful Web Services,是一個Java 編程語言的應用程序接口,支持按照表述性狀態轉移(REST)架構風格創建Web服務。JAX-RS使用了Java SE5引入的Java標註來簡化Web服務的客戶端和服務端的開發和部署。JSR339規範爲JSR311規範的升級規範,目前JSR311規範與JSR339規範均已完成。 

1.5 RESTful Web Service的實現方案 

關於RESTful Web Service的實現方案有兩種:一種是按照JAX-RS規範的標準實現,另外一種是按照自定義的方式實現。 

JAX-RS標準實現的框架比較有名的有:Jersey、Apache Wink等,其中,Jersey是JAX-RS規範的參考實現,比較有代表性。 

非標準實現的框架中比較有名的有:Spring MVC3.0、Restlet等,其中,Spring MVC3.0由於Spring框架在開發社區的影響力,使得它在非標準實現中比較有代表性,並且使用人羣較多。 
另外、除了這些成熟的開發框架以外,要實現REST Web Service也可以利用 Apache URL重寫機制,HTTPClient開發包,Java Servlet等方式實現。 

1.6 REST技術應用的意義 

REST技術應用的意義有兩點: 

第一、REST使得現在流行的互聯網應用在架構設計上回歸本質,能夠更加充分的利用REST架構風格中的各種架構屬性提升應用的品質。 

第二、REST的輕量級、簡單的特點更現行某些技術的複雜性形成鮮明的對比,使得構建應用或服務變得簡單易行。在開發者來看,一旦理解了REST技術內容,設計應用系統或服務時,可以使架構更加接近WEB本質,充分利用已有的基礎設施。對於應用系統或服務的使用者來將,REST推薦使用有意義的URI作爲資源接口,系統更加容易理解,系統間交互或人機交互更加友好。 
轉載地址:http://redhacker.iteye.com/blog/1923226
發佈了31 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章