Restful
全稱是Representational State Transfer
,即表現層狀態轉移。REST
指的是一組架構約束條件和原則,若是一個架構符合REST的約束條件和原則,就稱之爲RESTful
架構。RESTful
是一種軟件架構風格,而不是標準。那麼表現層狀態轉移怎麼理解?外國人取名老是這麼抽象,難以理解。html
REST
的名稱"表現層狀態轉化"中,省略了主語。"表現層"其實指的是"資源"(Resources)
的"表現層"。
所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。它能夠是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在。你能夠用一個URI
(統一資源定位符)指向它,每種資源對應一個特定的URI
。要獲取這個資源,訪問它的URI
就能夠,所以URI
就成了每個資源的地址或獨一無二的識別符。android
"資源"是一種信息實體,它能夠有多種外在表現形式。咱們把"資源"具體呈現出來的形式,叫作它的"表現層"(Representation
)。
好比,文本能夠用txt
格式表現,也能夠用HTML
格式、XML
格式、JSON
格式表現,甚至能夠採用二進制格式;圖片能夠用JPG
格式表現,也能夠用PNG
格式表現。URI
只表明資源的實體,不表明它的形式。嚴格地說,有些網址最後的".html"
後綴名是沒必要要的,由於這個後綴名錶示格式,屬於"表現層"範疇,而URI
應該只表明"資源"的位置。它的具體表現形式,應該在HTTP
請求的頭信息中用Accept
和Content-Type
字段指定,這兩個字段纔是對"表現層"的描述。服務器
訪問一個網站,就表明了客戶端和服務器的一個互動過程。在這個過程當中,勢必涉及到數據和狀態的變化。
互聯網通訊協議HTTP
協議,是一個無狀態協議。這意味着,全部的狀態都保存在服務器端。所以,若是客戶端想要操做服務器,必須經過某種手段,讓服務器端發生"狀態轉化"(State Transfer
)。而這種轉化是創建在表現層之上的,因此就是"表現層狀態轉化"。
客戶端用到的手段,只能是HTTP
協議。具體來講,就是HTTP
協議裏面,四個表示操做方式的動詞:GET
、POST
、PUT
、DELETE
。它們分別對應四種基本操做:GET
用來獲取資源,POST
用來新建資源(也能夠用於更新資源),PUT
用來更新資源,DELETE
用來刪除資源。
綜合上面的解釋,咱們總結一下什麼是RESTful
架構:
(1)每個URI
表明一種資源;
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端經過四個HTTP
動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。
總之,一句話描述就是用 URL
定位資源,用HTTP
動詞(GET
,POST
,DELETE
,PUT
)描述操做。restful