什么是 REST?
REST (REpresentation State Transfer)描述了一個架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web應(yīng)用程序。它首次出現(xiàn)在 2000 年Roy Fielding 的博士論文中,他是HTTP規(guī)范的主要編寫者之一。REST指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是 RESTful。
REST原則
Web 應(yīng)用程序最重要的 REST原則是,客戶端和服務(wù)器之間的交互在請求之間是無狀態(tài)的。從客戶端到服務(wù)器的每個請求都必須包含理解請求所必需的信息。如果服務(wù)器在請求之間的任何時間點(diǎn)重啟,客戶端不會得到通知。此外,無狀態(tài)請求可以由任何可用服務(wù)器回答,這十分適合云計算之類的環(huán)境??蛻舳丝梢跃彺鏀?shù)據(jù)以改進(jìn)性能。
在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫記錄、算法等等。每個資源都使用URI (Universal ResourceIdentifier) 得到一個惟一的地址。所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。使用的是標(biāo)準(zhǔn)的HTTP 方法,比如GET、PUT、POST和DELETE。Hypermedia是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。
另一個重要的 REST原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。通過將系統(tǒng)知識限制在單個層,可以限制整個系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。
當(dāng) REST架構(gòu)的約束條件作為一個整體應(yīng)用時,將生成一個可以擴(kuò)展到大量客戶端的應(yīng)用程序。它還降低了客戶端和服務(wù)器之間的交互延遲。統(tǒng)一界面簡化了整個系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。REST 簡化了客戶端和服務(wù)器的實現(xiàn)。Roy Thomas Fielding博士2000年提出
REST是英文Representational StateTransfer的縮寫
REST是WEB服務(wù)的一種架構(gòu)風(fēng)格
REST一種新型的分布式軟件設(shè)計架構(gòu)
使用HTTP、URI等廣泛流行的標(biāo)準(zhǔn)和協(xié)議
REST在原有的架構(gòu)上增加了三個新規(guī)范:統(tǒng)一接口,分層系統(tǒng)和按需代碼。
1.統(tǒng)一接口
REST架構(gòu)風(fēng)格的核心特征就是強(qiáng)調(diào)組件之間有一個統(tǒng)一的接口,這表現(xiàn)在REST世界里,網(wǎng)絡(luò)上所有的事物都被抽象為資源,而REST就是通過通用的鏈接器接口對資源進(jìn)行操作。這樣設(shè)計的好處是保證系統(tǒng)提供的服務(wù)都是解耦的,極大的簡化了系統(tǒng),從而改善了系統(tǒng)的交互性和可重用性。并且REST針對Web的常見情況做了優(yōu)化,使得REST接口被設(shè)計為可以高效的轉(zhuǎn)移大粒度的超媒體數(shù)據(jù),這也就導(dǎo)致了REST接口對其它的架構(gòu)并不是最優(yōu)的。
2.分層系統(tǒng)
分層系統(tǒng)規(guī)則的加入提高了各種層次之間的獨(dú)立性,為整個系統(tǒng)的復(fù)雜性設(shè)置了邊界,通過封裝遺留的服務(wù),使新的服務(wù)器免受遺留客戶端的影響,這也就提高了系統(tǒng)的可伸縮性。
3.按需代碼
REST允許對客戶端功能進(jìn)行擴(kuò)展。比如,通過下載并執(zhí)行applet或腳本形式的代碼,來擴(kuò)展客戶端功能。但這在改善系統(tǒng)可擴(kuò)展性的同時,也降低了可見性。所以它只是REST的一個可選的約束。
REST 架構(gòu)的主要原則
網(wǎng)絡(luò)上的所有事物都可被抽象為資源(Resource)
每個資源都有一個唯一的資源標(biāo)識符(ResourceIdentifier)
同一資源具有多種表現(xiàn)形式(xml、json等)
對資源的各種操作不會改變資源標(biāo)識符
所有的操作都是無狀態(tài)的(Stateless)
REST提出了一些設(shè)計概念和準(zhǔn)則:
。網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource);
。每個資源對應(yīng)一個唯一的資源標(biāo)識(resource identifier);
。通過通用的連接器接口(generic connectorinterface)對資源進(jìn)行操作;
。對資源的各種操作不會改變資源標(biāo)識;
。所有的操作都是無狀態(tài)的(stateless)。
REST的優(yōu)點(diǎn)
l可以利用緩存Cache來提高響應(yīng)速度
l通訊本身的無狀態(tài)性可以讓不同的服務(wù)器的處理一系列請求中的不同請求,提高服務(wù)器的擴(kuò)展性
l瀏覽器即可作為客戶端,簡化軟件需求
l相對與其他疊加在HTTP協(xié)議之上的機(jī)制,REST的軟件依賴性更小
l不需要額外的資源發(fā)現(xiàn)機(jī)制
l在軟件技術(shù)演進(jìn)中的長期的兼容性更好
什么是無狀態(tài)性?
無狀態(tài)性使得客戶端和服務(wù)器端不必保存對方的詳細(xì)信息,服務(wù)器只需要處理當(dāng)前Request,而不必了解前面 Request 的歷史
無狀態(tài)性減少了服務(wù)器從局部錯誤中恢復(fù)的任務(wù)量,可以非常方便地實現(xiàn) Fail Over技術(shù),從而很容易地將服務(wù)器組件部署在集群內(nèi)
無狀態(tài)性使得服務(wù)器端不必在多個 Request 中保存狀態(tài),從而可以更容易地釋放資源
無狀態(tài)性無需服務(wù)組件保存 Request 狀態(tài),因此可讓服務(wù)器充分利用 Pool 技術(shù)來提高穩(wěn)定性和性能
愛華網(wǎng)


