restlet簡介

jopen 11年前發布 | 29K 次閱讀 WEB服務/RPC/SOA Restlet

1.什么是rest

    REST是表象化狀態轉變(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格 。

要注意的是,REST是設計風格而不是標準。REST通常基于使用HTTP,URI,和XML以及HTML這些現有的廣泛流行的協議和標準。

· 資源是由URI來指定。

· 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。

· 通過操作資源的表形來操作資源。

· 資源的表現形式則是XML或者HTML,取決于讀者是機器還是人,是消費web服務的客戶軟件還是web瀏覽器。當然也可以是    任何其他的格式。

 

2.什么是restlet 

     Restlet是一個Java下的輕量級REST框架。它可用于實現任何種類的REST式系統,而不僅僅是REST式Web服務。通過使用REST設計風格模糊了Web站點和Web服務之間的界限,從而幫助開發人員構建Web應用。每一個主要的REST概念(REST concept)都有一個對應的Java類。你的REST化的Web設計和你的代碼之間的映射是非常簡單直接的。
     Restlet項目受到Servlet API、JSP(Java Server Pages)、HttpURLConnection及Struts等Web開發技術的影響。該項目的主要目標是:在提供同等功能的同時,盡量遵守Roy Fielding博士論文中所闡述的REST的目標。它的另一個主要目標是:提出一個既適于客戶端應用又適于服務端的應用的、統一的Web視圖。
    Restlet的思想是:HTTP客戶端與HTTP服務器之間的差別,對架構來說無所謂。一個軟件應可以既充當Web客戶端又充當Web服務器,而無須采用兩套完全不同的APIs。

3.為什么有必要創建另一種框架?難道Servlet API還不夠好用嗎?

    Servlet AIP在1998年發布,從那個時候起它的核心設計一直沒有很大的變化。它是Java EE的眾多API中最成功的一個,但是它的幾個設計缺陷和一些限制損害了它。舉個例子,URI模式和它的處理者(handler)之間的映射是受限制的,而且其配置都集中在一個配置文件中。還有,它把 socket流的控制直接交給了應用系統開發人員,Servlet容器阻礙了我們充分使用NIO特性對IO操作進行優化。另一個主要問題就是Servlet API鼓勵應用開發者在應用或者用戶會話級別直接將session狀態保存于內存中,盡管這看上去不錯,但它造成了Servlet容器擴展性和高可用性的主要問題。為了克服這些問題,就必須實現復雜的負載均衡、session復制、持久化機制。這導致了可擴展性必然成為災難。

4.如何看待別的框架中對REST的支持(例如Axis2,或者CXF/XFire)?

    這些支持非常有效,但是作用非常有限。我的主要觀點是設計這些項目是為了符合WS-*/SOAP Stack,它們與REST世界并不非常契合。在REST世界里,定義了一個全新的范例:面向資源的設計,而非通過遠程方法調用這樣的范例。例如Axis2僅僅支持GET和POST兩種HTTP方法,它需要遠程方法的傳遞需要一個URI參數。這在REST中式不允許的,這種做法也不能被稱之為REST化。XFire1.2不支持REST,但是它發布了一個項目用于將POJO映射到REST化的Web服務。這有點類似最近發布的 JSR-311,此JSR試圖基于一套annotation和助手類標準化這種映射。

5.REST與HTTP協議

    REST軟件架構是由Roy Thomas Fielding博士在2000年首次提出的。他為我們描繪了開發基于互聯網網絡軟件的藍圖。REST軟件架構是一個抽象的概念,是一種為了實現這一互聯網的超媒體分布式系統的行動指南。利用任何的技術都可以實現這種理念。而實現這一軟件架構最著名的就是HTTP協議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基于 HTTP的REST軟件架構,或者更進一步把REST和HTTP看作為等同的概念。今天,HTTP是互聯網上應用最廣泛的計算機協議。HTTP不是一個簡單的運載數據的協議,而是一個具有豐富內涵的網絡軟件的協議。它不僅僅能夠對于互聯網資源進行唯一定位,而且還能告訴我們對于該資源進行怎樣運作。這也是 REST軟件架構當中最重要的兩個理念。而REST軟件架構理念是真正理解HTTP協議而形成的。有了REST軟件架構理念出現,才使得軟件業避免了對 HTTP協議的片面理解。只有正確的理論指導,才能避免在軟件開發的實際工作過程中少走彎路。

6.REST與URI(資源定位)

   REST軟件架構之所以是一個超媒體系統,是因為它可以把網絡上所有資源進行唯一的定位,不管你的文件是圖片、文件Word還是視頻文件,也不管你的文件是txt文件格式、xml文件格式還是其它文本文件格式。它利用支持HTTP的TCP/IP協議來確定互聯網上的資源。

7.REST與CRUD原則
    REST軟件架構遵循了CRUD原則,該原則告訴我們對于資源(包括網絡資源)只需要四種行為:創建(Create)、獲取(Read)、更新(Update)和銷毀(DELETE)就可以完成對其操作和處理了。其實世界萬物都是遵循這一規律:生、變、見、滅。所以計算機世界也不例外。這個原則是源自于我們對于數據庫表的數據操作:insert(生)、select(見)、update(變)和delete(滅),所以有時候CRUD也寫作為 RUDI,其中的I就是insert。這四個操作是一種原子操作,即一種無法再分的操作,通過它們可以構造復雜的操作過程,正如數學上四則運算是數字的最基本的運算一樣。
 
8.REST與網絡服務
    盡管在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 CXFAxis2。Java語言也制定關于REST網絡服務規范:JAX-RS: Java API for RESTful Web Services (JSR 311)。相信還會出現更多與REST相關的激動人心的信息。

9.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的服務器關心的是從所有網絡客戶端發送到服務器操作的順序。這樣使得互聯網這樣一個巨大的網絡得到有序的管理。

10.REST與Rails框架
    Ruby on Rails框架(簡稱Rails或者Rails框架)是一個基于Ruby語言的越來越流行的網絡應用軟件開發框架。它提供了關于REST 最好的支持,也是當今應用REST最成功的一個軟件開發框架。Rails框架(從版本1.2.x起)成為了第一個引入REST作為核心思想的主流網絡軟件開發框架。在Rails框架的充分利用了REST軟件架構之后,人們更加堅信REST的重要性和必要性。Rails利用REST軟件架構思想對網絡服務也提供了一流的支持。從最直觀的角度看待REST,它是網絡服務最理想的手段,但是Rails框架把REST帶到了網絡應用軟件開發框架。這是一次飛躍,讓 REST的思想從網絡服務的應用提升到了網絡應用軟件開發。利用REST思想的simply_restful插件已經成為了Rails框架的核心內容。

11 REST安全
     我們把現有基于SOAP的網絡服務和基于REST/HTTP網絡服務作個比喻,前者是一種傳統的寄信方式,而后者是現代網絡的電子郵件方式。要是是寄信和電子郵件都有病毒存在的話,傳統的寄信被送到對方就很危險,而電子郵件是開發的,電子郵件供應商比如Google為我們檢查了電子郵件是否有病毒。這里并不是說明SOAP網絡服務消息包含義病毒,而是說明HTTP是無法處理SOAP信息包究竟好不好,需要額外的軟件工具解決這一問題,包括防火墻也用不上和管不了。REST/HTTP網絡服務的信息包可以被防火墻理解和控制。你可以按照操作和鏈接進行過濾信息包,如你可以規定從外部來的只能讀取(GET操作)自己服務器的資源。這樣對于系統管理員而言使得軟件管理更為簡單。REST的安全性還可以利用傳輸安全協議SSL/TLS、基本和摘要式認證(Basic und Digest Authentication)。除了這些REST自身的安全性功能外,還可以利用像基于信息的 Web Services Security(JSR 155)作為REST不錯的補充。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!