1. 程式人生 > >對RESTFUL理解

對RESTFUL理解

目前都在提倡RESTful風格的API,RESTful架構,那到底什麼是RESTful?什麼是RESTful風格。在這寫出自己對REST的理解。
REST最早出自一個計算機大牛(主導設計了HTTP協議1.1和1.0版,目前HTTP都有HTTP2了),指的是表述性狀態轉移。

表述性狀態轉移是一種設計的思想或者說規範。通過規範約束介面的定義,規範介面的形式,利於呼叫者對介面的呼叫,以及服務提供者對介面的維護。從而影響介面的設計。設計URL就是在分清楚系統中有哪些資源,對資源的良好劃分影響系統介面的設計,同時會正向影響URL更規範。

我們訪問一個服務,通過呼叫服務的介面來實現。比如我們想訪問百度,需要通過URL(

http://www.baidu.com) 來訪問,URL是由協議與URI(統一資源定位符)組成,實際上我們訪問的是伺服器的資源。獲取的是資源的狀態。

在RESTful之前,我們使用URI去定位,或者訪問某一資源服務,URI的定義也就是介面地址一般情況下是專案約定的,表示行為的,例如一個查詢天氣服務的介面地址,若我們查詢北京的天氣,
我們會寫成 : xxxx/getWeather.do?city=beijing。
我們服務的理解是行為動作(獲取天氣),?後面的city=beijing是查詢條件,.do 表示訪問的是服務。

RESTful風格理解的我們訪問的是資源,我們在獲取資源那麼就使用HTTP中請求的型別對介面進行表述。我們會把API寫成:

GET(請求型別)  
xxxx/weather/beijing 

充分利用傳輸協議(這裡是HTTP協議,也可以是其他協議),約定了請求型別GET。在HTTP協議中GET用來獲取資源,DELETE用來刪除資源,POST用來修改資源(非冪等),PUT用來更新資源(冪等的)。通過協議中的請求方式就很明確這個介面API是執行的(增刪改查中的)什麼操作。查詢條件對應資源來說就是對資源的過濾。

狀態轉換,客戶端就是應用,伺服器資料庫就是資源 。客戶端的應用傳送實際請求,這時候應用狀態改變,伺服器接收到這個請求,伺服器中資源狀態改變。我們認為資源是有狀態的,比如天氣的 氣溫,我們更新天氣從 10℃ 到 -10℃ 是天氣這個資源的狀態的轉換,通過RESTfulAPI設計為:

POST 
xxxx/weater/beijing 
{from:10to:-10, stat:temperature}