https://cloud.tencent.com/developer/news/15977html
今天下班回家時,一個組員在QQ上面問我是否知道REST架構,我當時楞了幾秒,回想了兩年前第一次學習RESTful的場景。很是尷尬,不少東西我都忘記了。web
在短暫的回憶以後,我在手機上打出了這樣一段文字「我目前還無法很好的解釋,簡單說它是一種面向資源的架構設計風格」。接下來一種我想到了,這樣的主流框架在定義路由的時候都採用了這樣的設計,甚至的、的都不例外。可是這到底是一種怎樣的設計呢?我沒法用語言描述清楚。後端
在我看來同樣東西是否理解,不取決因而否會使用,而是可以向不理解的人講述清楚。從這個觀點上來看,我對RESTful算是一點也說不上理解了。服務器
在網上查了些資料,很是多的人爲REST與RESTful提出了本身的理解,在中心思想不變的狀況下,又各自演化出了各自對REST思想的解讀。爲何會這樣呢?由於提出REST思想的是一篇學術論文中的某個章節,而學術論文自己就是晦澀難懂的,因此纔會出現了五花八門的各自解釋。restful
總結了一下網上各類各樣的說法。發現對REST思想的理解能夠分爲幾個層次。markdown
初級層架構
並非徹底說這一層很low,而是他能用一句話進行歸納性的總結。框架
總結一句話就是:用URL定位資源,用HTTP動詞來描述操做,經過HTTP的響應碼來感知結果。前後端分離
這是目前我認爲的對REST架構設計的最精簡的解讀了。可是他並無說明咱們該如何去作。這個時候就須要咱們過分到中級層面來看待問題了工具
中級層
在這一層的理解我推薦看阮一峯的《理解RESTful架構》這一篇文章。我會綜合其餘幾篇文章來談談本身的讀後的理解。
首先對REST進行一個定義,從字面翻譯來看是指「表現層狀態轉化」。這個字面意義初看我是沒法理解的,只能進行拆解。
其中的R是指翻譯成中文是指表示層。(可是我沒有查到是否與OSI的7層模型中的表示層有什麼區別,中文中這兩個意思都同樣,甚至在英文中二者意思也沒有什麼差別,同時在StackOverflow上面搜索發現和也是能夠混用的)。在阮一峯看來,這裏的表示層是指資源的表現層,在互聯網上能夠用一個URL(統一資源定位符)來指向它。
狀態轉化(State Transfer):從《圖解HTTP》中咱們能得知HTTP協議是一種無狀態的,排除Cookie,沒法區分同一個URL請求的狀態。若是想操做服務器,就必須經過某種方法,讓服務器發生狀態改變。這裏指的其實就是HTTP的動詞方法。,,,等都屬因而常見的動詞方法。
那麼再有了上面的理論以後,咱們得出結論是:1.每個URL表明了一個資源,客戶端和服務端經過HTTP中的動詞方法來講明本身的意圖。
例如簡述的用戶首頁請求這種就是一個RESTful風格的URL,若是須要發送一些具體的信息可使用這種形式在請求內容中附上具體信息就好。整個的path路徑中不須要帶上動詞,由於HTTP的動詞就已經可以很好的說明一切了。
最後服務端在作出響應的時候,只要配合上響應碼code這時就可以確切的得知服務端的具體信息了。
初看好像這樣的作法沒什麼,可是若是細細想一下就會發現,這樣的架構設計不只能用於web,也能夠用於其餘端,或者是任意一個支持了HTTP協議的工具。
這樣的架構設計很是巧妙的把先後端進行了數據層面上的分離。在web開發進行先後端分離的時代,作出了很大的理論與架構設計上的貢獻。這是我目前對REST架構設計的理解。
高級層
到了這一層,大部分優秀的通過別人的理解以後加工出來的文章你可能都已經看過了,那麼接下來你須要去啃論文了。
若是隻從第5章和第6章講REST架構的地方開始看的話,大概是70多頁的內容。初步計算須要花費4-5天的業餘時間。理性告訴我現階段我不應在這上面耗費太多時間。因此若是還有第三次學習REST的話,我會直接去學習原版論文。
總結
經過此次學習,對REST又有了一些深刻的理解。雖然在我看來也只是再原來淺薄的基礎上又深刻了一些。
寫在結尾,熟悉了REST,你知道最近有一個新的概念叫GraphQL麼,與REST相比他又能算得上是一種新的思想。
技術老是在不斷的變化,三年開發給個人最深的感觸就是,偏偏是那些在大學計算機系裏面通過了幾十年沉澱下來的那些不變的基礎知識才是最有用技能。而這個行業的不少新人在追尋的只不過是屠龍之技罷了。
參考資料
怎樣用通俗語言解釋REST,以及RESTful https://www.zhihu.com/question/28557115
理解RESTful架構http://www.ruanyifeng.com/blog/2011/09/restful.html
REST架構相關論文http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf