關於rest風格一些理解

2021-07-08 10:51:30 字數 1902 閱讀 2528

最近的乙個專案業務邏輯比較簡單,最近只是照貓畫虎般的借用springmvc將自己的請求url風格換成rest風格,這樣的uri的確是比以前的url具有更高的可讀性,但是感覺始終沒有真正理解rest風格。重新看了一些資料,將一些思考記錄一下。

representational state transfer,中文翻譯:表述性狀態轉移

表述指的是資源的表述,理解rest應該結合資源理解這幾個單詞

統一資源介面

統一介面包含了一組受限的預定義的操作,和響應碼。

操作 不論什麼樣的資源,都是通過使用相同的介面進行資源的訪問。介面應該使用標準的http方法如get,put和post,並遵循這些方法的語義。如果按照http方法的語義來暴露資源,那麼介面將會擁有安全性和冪等性的特性。

個人感覺這裡就是減少了介面設計的自主性,使用預定義的介面,來達到規範性和統一性。

響應碼

不同於soap並需通過響應實體才能給出錯誤資訊。對於rest而言,正確使用這些狀態**意味著客戶端與伺服器可以在乙個具備較豐富語義的層次上進行溝通。 假如你不利用http狀態**豐富的應用語義,那麼你將錯失提高重用性、增強互操作性和提公升松耦合性的機會。

資源表述

這裡主要說的是同種資源對外界的呈現形式有多種。比如文字資源可以採用html、xml、json等格式,可以使用png或jpg展現出來。對於同乙個請求,移動端一般請求成功需要返回乙個json;網頁端一般可能會跳轉乙個jsp頁面(html)。 資源的表述包括資料和描述資料的元資料,例如,http頭「content-type」 就是這樣乙個元資料屬性。可以通過http內容協商,客戶端可以通過accept頭請求一種特定格式的表述,服務端則通過content-type告訴客戶端資源的表述形式。

例如get和head請求都是安全的, 無論請求多少次,都不會改變伺服器狀態。這種就是安全性;

而get、head、put和delete請求都是冪等的,無論對資源操作多少次, 結果總是一樣的,後面的請求並不會產生比第一次更多的影響,這就是冪等性。

在我看來,rest核心是資源,當我們設計乙個系統的時候,首先從資源的角度進行考慮。

面向資源最直觀的感覺就是url中沒有動詞了,都是表示資源的名詞。

統一介面

這裡其實是讓http回歸本質,http協議本身就自帶method,而且還有表示各種不同狀態的返回碼等等。

當我們面向資源設計系統的時候,只要在資源層次對客戶端和伺服器端開放。這時候增刪查改都有了統一介面,減少溝通交流成本。

架構擴充套件-十年不會過時的軟體系統架構

著作權歸作者所有。

rest本身不是架構,只是一種架構風格,理解它的時候要參考這個架構風格出現的環境所施加的約束條件。

rest的目的是「建立十年內不會過時的軟體系統架構」,所以它具備三個特點:

狀態無關 —— 確保系統的橫向拓展能力

超文字驅動,fielding的原話是」hypertext-driven」 —— 確保系統的演化能力

對 resource 相關的模型建立統一的原語,例如:uri、http的method定義等 —— 確保系統能夠接納多樣而又標準的客戶端

從另外乙個角度看,第一條保證服務端演化,第三條保證客戶端演化,第二條保證應用本身的演化,這實在是乙個極具抽象能力的方案。

實踐中一般需要解決兩個問題,

1. 查詢條件多,多種限制條件,分頁引數等。

2. 批量操作

曾看見有人對論壇裡提出rest實踐:對於使用者登入和使用者退出這兩個業務需求,rest指導下的架構和設計如何滿足批量的刪除、修改、新增如何滿足

最佳實踐

restful web 服務四種操作post/delete/put/get

理解restful架構

那篇博士**

rest風格的理解

個人理解rest風格是一種規範,之前傳統的風格是將資源和對資源的操作融合在一起,而rest風格則是將資源和對資源的操作分隔開,充分發揮http動作,不是摁住post和get使勁薅。比方說庫存裡的一件商品是資源,傳統方式對這件商品進行修改,可能是http updateproduct,而rest風格則是...

關於REST架構風格的初步理解

wikipedia representational state transfer rest is a style of software architecture for distributed hypermedia systems such as the world wide web.翻譯上面的...

對REST風格的理解

1.自我理解 資源 表述性狀態轉換 轉移 將服務物件資源化,採用資源的風格來架構系統。即,把每個服務抽象為資源,通過對這個資源的curd形成統一的介面。更多情況下,體現為約定大於協議。2.統一性 每個資源只允許有curd,多個資源間的定義為資源委派 resourceassignment,對委派的資源...