關於REST

REST,名詞,一種網絡架構規範,同上。
RESTful,形容詞,指實現了 REST規範的系統,如實現了REST規範的Web API就叫RESTful API。
REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。

REST原則

Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每個請求都必須包含理解請求所必需的信息。如果服務器在請求之間的任何時間點重啓,客戶端不會得到通知。此外,無狀態請求可以由任何可用服務器回答,這十分適合雲計算之類的環境。客戶端可以緩存數據以改進性能。

在服務器端,應用程序狀態和功能可以分爲各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址。所有資源都共享統一的界面,以便在客戶端和服務器之間傳輸狀態。使用的是標準的 HTTP 方法,比如 GETPUTPOST  DELETEHypermedia是應用程序狀態的引擎,資源表示通過超鏈接互聯。

另一個重要的 REST 原則是分層系統,這表示組件無法瞭解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的複雜性,促進了底層的獨立性。

當 REST 架構的約束條件作爲一個整體應用時,將生成一個可以擴展到大量客戶端的應用程序。它還降低了客戶端和服務器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST 簡化了客戶端和服務器的實現。Roy Thomas Fielding博士2000年提出

REST是英文Representational State Transfer的縮寫

RESTWEB服務的一種架構風格

REST一種新型的分佈式軟件設計架構

使用HTTPURI等廣泛流行的標準和協議


REST在原有的架構上增加了三個新規範:統一接口,分層系統和按需代碼。 

1.統一接口 
    REST 架構風格的核心特徵就是強調組件之間有一個統一的接口,這表現在REST世界裏,網絡上所有的事物都被抽象爲資源,而REST就是通過通用的鏈接器接口對資源進行操作。這樣設計的好處是保證系統提供的服務都是解耦的,極大的簡化了系統,從而改善了系統的交互性和可重用性。並且REST針對Web的常見情況做了優化,使得REST接口被設計爲可以高效的轉移大粒度的超媒體數據,這也就導致了REST接口對其它的架構並不是最優的。 

2.分層系統 
    分層系統規則的加入提高了各種層次之間的獨立性,爲整個系統的複雜性設置了邊界,通過封裝遺留的服務,使新的服務器免受遺留客戶端的影響,這也就提高了系統的可伸縮性。 

3.按需代碼 
    REST允許對客戶端功能進行擴展。比如,通過下載並執行applet或腳本形式的代碼,來擴展客戶端功能。但這在改善系統可擴展性的同時,也降低了可見性。所以它只是REST的一個可選的約束。 


REST 架構的主要原則

網絡上的所有事物都可被抽象爲資源(Resource

每個資源都有一個唯一的資源標識符(Resource Identifier

同一資源具有多種表現形式(xmljson)

對資源的各種操作不會改變資源標識符

所有的操作都是無狀態的(Stateless

REST提出了一些設計概念和準則: 
。網絡上的所有事物都被抽象爲資源(resource); 
。每個資源對應一個唯一的資源標識(resource identifier); 
。通過通用的連接器接口(generic connector interface)對資源進行操作; 
。對資源的各種操作不會改變資源標識; 
。所有的操作都是無狀態的(stateless)。

REST的優點

l   可以利用緩存Cache來提高響應速度

l   通訊本身的無狀態性可以讓不同的服務器的處理一系列請求中的不同請求,提高服務器的擴展性

l   瀏覽器即可作爲客戶端,簡化軟件需求

l   相對與其他疊加在HTTP協議之上的機制,REST的軟件依賴性更小

l   不需要額外的資源發現機制

l   在軟件技術演進中的長期的兼容性更好

什麼是無狀態性?
無狀態性使得客戶端和服務器端不必保存對方的詳細信息,服務器只需要處理當前Request,而不必瞭解前面 Request 的歷史
無狀態性減少了服務器從局部錯誤中恢復的任務量,可以非常方便地實現 Fail Over 技術,從而很容易地將服務器組件部署在集羣內
無狀態性使得服務器端不必在多個 Request 中保存狀態,從而可以更容易地釋放資源
無狀態性無需服務組件保存 Request 狀態,因此可讓服務器充分利用 Pool 技術來提高穩定性和性能

關於Spring MVC與JAX-RS比較分析

Jersey吧,是JAX-RS標準的參考實現,是Java領域中開發REST式web/服務的"正統"工具
Spring MVC 能體會到的好處就是和Spring 其他玩意兒結合方便

JAX-RS有“根”資源(標記爲@Path)和子資源的概念。

Spring MVC則沒有根資源與子資源的概念,這樣每個控制器都是由Spring而非應用來管理的

發佈了49 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章