rest架構風格是全新的針對web應用的開發風格,是當今世界最成功的網際網路超**分布式系統架構,它使得人們真正理解了http協議本來面貌。隨著 rest架構成為主流技術,一種全新的網際網路網路應用開發的思維方式開始流行。
rest是什麼
rest是英文representational state transfer的縮寫,中文翻譯為「表述性狀態轉移」,他是由roy thomas fielding博士在他的** 《architectural styles and the design of network-based software architectures》中提出的乙個術語。rest本身只是為分布式超**系統設計的一種架構風格,而不是標準。
基於web的架構,實際上就是各種規範的集合,這些規範共同組成了web架構。比如http協議,比如客戶端伺服器模式,這些都是規範。每當我們在原有規 范的基礎上增加新的規範,就會形成新的架構。而rest正是這樣一種架構,他結合了一系列的規範,而形成了一種新的基於web的架構風格。
傳統的web應用大都是b/s架構,它包括了如下一些規範 。
客戶-伺服器
無狀態性
快取b/s架構的優點是其部署非常方便,但在使用者體驗方面卻不是很理想。為了改善這種情況,我們引入了rest。
rest在原有的架構上增加了三個新規範:統一介面,分層系統和按需**。
統一介面
分層系統
按需**
rest的設計準則
rest架構是針對web應用而設計的,其目的是為了降低開發的複雜性,提高系統的可伸縮性。rest提出了如下設計準則:
網路上的所有事物都被抽象為資源(resource);
每個資源對應乙個唯一的資源識別符號(resource identifier);
通過通用的聯結器介面(generic connector inte***ce)對資源進行操作;
對資源的各種操作不會改變資源識別符號;
所有的操作都是無狀態的(stateless)。
rest是基於http協議的,任何對資源的操作行為都是通過http協議來實現。以往的web開發大多數用的都是http協議中的get和post方 法,對其他方法很少使用,這實際上是因為對http協議認識片面的理解造成的。http不僅僅是乙個簡單的運載資料的協議,而是乙個具有豐富內涵的網路軟 件的協議。他不僅僅能對網際網路資源進行唯一定位,而且還能告訴我們如何對該資源進行操作。http把對乙個資源的操作限制在4個方法以內:get, post,put和delete,這正是對資源crud操作的實現。由於資源和uri是一一對應的,執行這些操作的時候uri是沒有變化的,這和以往的 web開發有很大的區別。正由於這一點,極大的簡化了web開發,也使得uri可以被設計成更為直觀的反映資源的結構,這種uri的設計被稱作 restful的uri。這位開發人員引入了一種新的思維方式:通過url來設計系統結構。當然了,這種設計方式對一些特定情況也是不適用的,也就是說不 是所有的uri都可以restful的。
rest 之所以可以提高系統的可伸縮性,就是因為它要求所有的操作都是無狀態的。由於沒有了上下文(context)的約束,做分布式和集群的時候就更為簡單,也 可以讓系統更為有效的利用緩衝池(pool)。並且由於伺服器端不需要記錄客戶端的一系列訪問,也減少了伺服器端的效能。
使用rest架構
對於開發人員來 說,關心的是如何使用rest架構,這裡我們來簡單談談這個問題。rest不僅僅是一種嶄新的架構,它帶來的更是一種全新的web開發過程中的思維方式: 通過url來設計系統結構。在rest中,所有的url都對應著資源,只要url的設計是良好的,那麼其呈現的系統結構也就是良好的。這點和tdd (test driven development)很相似,他是通過測試用例來設計系統的介面,每乙個測試用例都表示一系列使用者的需求。開發人員不需要一開始就編寫功能,而只需要 把需要實現的功能通過測試用例的形式表現出來即可。這個和rest中通過url設計系統結構的方式類似,我們只需要根據需求設計出合理地url,這些 url不一定非要鏈結到指定的頁面或者完成一些行為,只要它們能夠直觀的表現出系統的使用者介面。根據這些url,我們就可以方便的設計系統結構。從 rest架構的概念上來看,所有能夠被抽象成資源的東西都可以被指定為乙個url,而開發人員所需要做的工作就是如何能把使用者需求抽象為資源,以及如何抽 象的精確。因為對資源抽象的越為精確,對rest的應用來說就越好。這個和傳統mvc開發模式中基於action的思想差別就非常大。設計良好的url, 不但對於開發人員來說可以更明確的認識系統結構,對使用者來說也方便記憶和識別資源,因為url足夠簡單和有意義。按照以往的設計模式,很多url後面都 是一堆引數,對於使用者來說也是很不方便的。
既然rest這 麼好用,那麼是不是所有的web應用都能採取此種架構呢?答案是否定的。我們知道,直到現在為止,mvc(model-view-controller) 模式依然是web開發最普遍的模式,絕大多數的公司和開發人員都採取此種架構來開發web應用,並且其思維方式也停留於此。mvc模式由資料,檢視和控制 器構成,通過事件(event)觸發controller來改變model和view。加上webwork,struts等開源框架的加入,mvc開發模 式已經相當成熟,其思想根本就是基於action來驅動。從開發人員角度上來說,貿然接受乙個新的架構會帶來風險,其中的不確定因素太多。並且rest新 的思維方式是把所有使用者需求抽象為資源,這在實際開發中是比較難做到的,因為並不是所有的使用者需求都能被抽象為資源,這樣也就是說不是整個系統的結構都能 通過rest的來表現。所以在開發中,我們需要根據以上2點來在rest和mvc中做出選擇。我們認為比較好的辦法是混用rest和mvc,因為這適合絕 大多數的web應用開發,開發人員只需要對比較容易能夠抽象為資源的使用者需求採取rest的開發模式,而對其它需求採取mvc開發即可。這裡需要提到的就 是ror(ruby on rails)框架,這是乙個基於ruby語言的越來越流行的web開發框架,它極大的提高了web開發的速度。更為重要的是,ror(從1.2版本起)框 架是第乙個引入rest做為核心思想的web開發框架,它提供了對rest最好的支援,也是當今最成功的應用rest的web開發框架。實際上,ror的 rest實現就是rest和mvc混用,開發人員採用ror框架,可以更快更好的構建web應用。
對開發人員來說,rest不僅僅在web開發上貢獻了自己的力量,同時也讓我們學到了如何把軟體工程原則系統地應用於對乙個真實軟體的設計和評估上。
什麼是REST架構
rest架構風格是全新的針對web應用的開發風格,是當今世界最成功的網際網路超 分布式系統架構,它使得人們真正理解了http協議本來面貌。隨著 rest架構成為主流技術,一種全新的網際網路網路應用開發的思維方式開始流行。rest是什麼 rest是英文representational state tr...
什麼是REST和RESTful
再次首先,rest的全稱是resource representational state transfer,據說是因為晦澀所以去掉了前面的resource。分解開來 resource 資源,即資料 前面說過網路的核心 比如 newsfeed,friends等 representational 某種表...
什麼是REST,以及RESTful?
rest representational state transfer 直接翻譯 表現層狀態轉移。這個中文直譯經常出現在很多部落格中。尼瑪誰聽得懂 表現層狀態轉移 這是人話嗎?我自己也困惑了很久,查詢了很多資料,花了差不多一年有個還算清晰的理解。分享如下 ivony 老師的一句話概括很精闢 url...