前面,我們通過使用rails架構的相關指令,建立了一個标準的rails控制器,并且通過簡單的路由配置資訊和視圖配置資訊,在網站的首頁上顯示了一條簡單的消息,讓大家了解了rails架構中MVC設計模式的基本使用方式和基本工作流程,但相信在看過上次分享之後,但是有人可以還會有一些疑惑,比如說MVC設計模式中反複中反複提到的請求,它本質上到底是什麼東西呢?為什麼rails架構能夠接受并且識别一個請求的内容,并且能夠對其進行相應的處理,這種請求都有什麼類型,它的工作方式是怎樣的,這些問題可能還會存在疑問,那帶着這些問題,我們将進入rails資源這一大的概念的學習,這個資源的概念,是rails中一個非常非常重要的内容,學習并了解好資源的概念,對rails的開發非常的重要
jacky首先要跟大家講授REST的概念和RESTful的應用風格,因為這有助于了解rails架構中的資源,在本系列的開頭,jacky說過:rails架構幾個必須知道的内容,其中有一條是:“對于web應用來說,REST是最好的”,
(一) web應用的本質
- web應用的本質就是給使用者提供服務,使用者通過通路我們的web應用來擷取服務,這裡使用者擷取的服務一般指擷取資訊;
- 也可以這麼說:web應用的本質就是:使用者client與應用的服務server的互動過程;而這次分享,jacky要講的rest,就是用來描述client使用者與服務server互動方式的一個東西;
(二)REST與MVC的關系
- REST與MVC是沒有關系的,這裡大家一定不要聯想與混淆;
- 在一個web 應用中,MVC用來定義應用的結構,而REST用來定義使用者與服務的互動方式;
(三)REST
rest是一種軟體架構風格,它的目标是建立可擴充的web服務,應用使用REST規範進行互動是可以提高應用的性能和可維護性
3.1 REST定義
rest不是一個單詞,它是一組單詞的縮寫,rest直譯過來就是資源的表現層狀态轉化。
- 資源
- 表現層
- 狀态轉化
我們通過學習一個小例子,幫助了解rest
- 我們上網的過程,就是上網通路資源,我們看某個人的部落格,這裡,部落格就是一個資源;除此之外,還可以是歌曲,書籍等等内容,總之,資源就是網絡上的一種實體,或者說是網絡上的一種具體資訊,隻要能讓使用者擷取的,都可以是資訊,是以大家一定要抽象的了解這個事情;總結一下:資源,就是一種能讓使用者擷取的資訊。
- 比如我們使用者要通路部落格的應用,那我們就要告訴web應用伺服器,比如我們想要看這個私人部落格的部落格清單的第一個頁,那我們的部落格(web應用)傳回了我們這個部落格清單的第一頁,顯示在了你的螢幕上,那這個格式可以是txt文本模式,也可以是html這個網站格式,或者xml格式,甚至可以是圖檔、音頻、視訊,那這裡傳回的部落格清單第一頁的方式,就叫做表現層,也就是說表現層就可以了解為使用者和伺服器互動過程中伺服器傳回資訊的方式;
- 當我們看完第一頁部落格,要看第二頁的時候,這時候問題就出現了,按照我們慣性思維,你看完了第一頁,要看第二頁的時候,這個時候我們可能會以為,我們告訴伺服器我們要看下一頁不就可以了嗎?然後我們以此類推,我們再看下一頁,就這樣一頁一頁看下去?但是問題就在于,rest服務是一種無狀态的服務;什麼叫無狀态呢?也就是說太不會保持目前是第幾頁的狀态,是以你說你看下一頁,伺服器并不知道下一頁是第幾頁,是以我們要将我們的請求改為:我要看部落格清單的第二頁,也就是說每次我們都要精确的告訴伺服器,我們要擷取資源的位置,隻有這樣,伺服器才會把你的清單内容返還給你,也就是說使用者想要操作伺服器,就必須通過定位服務的資源的方式,再加上某種手段讓服務的狀态發生轉化,那麼這種轉化就是建立在表現層的基礎上的,是以就叫表現層的狀态轉化,上面的這個例子跟我們擷取部落格這個資源結合起來,就解釋了“資源的表現層的狀态轉化”的過程。
3.2 用url 定位資源
在rest中,到底是如何實作上述的這些概念的呢?那我們用一句話來概括,就是用url 定位資源,使用http動作描述操作;
(1)url資源定位
- 什麼是url資源定位?
- 一條url路徑,它必須完整包含你要擷取資源的準确位置;
用url已經标記我們要操作的資源,那接下來我們就要标記資源要操作的方式,我們是擷取,還是删除,還是更新,那标明操作方式的動作,就需要我們http動作來描述;
(2)HTTP動作描述操作
- get
- post
- delete
- update
總結
- 通過以上的分享,我們就能了解REST架構風格的内容,它就是定義使用者與伺服器之間一種互動方式的規範;就好像人與人之間交談的語言一樣,REST就是一種互動語言,那麼相應的實作并且遵守這樣互動規範形式,我們就叫它RESTful應用程式,或者叫REST風格的應用程式;
- 那麼,使用REST風格它的優勢在哪兒呢?為什麼rails架構會說,對于web架構來說,rest是最好的?
- 首先,rest将資源最為web應用的核心内容,這樣就容易設計出标準和統一的url書寫風格,同時url 具有很強的可讀性,并且具有自描述性;
- 還有就是無狀态的服務特性,它保證了系統的橫向擴充能力,否則伺服器就會随着儲存狀态的時間和複雜度而變得越來越臃腫,如果我們伺服器要儲存狀态的話,1000個使用者就要儲存1000個狀态,對伺服器的壓力是很大的;
- 最後就是rest風格的應用程式,能夠非常友善的跨平台使用,因為任何一種支援http請求的應用都可以與rest服務進行互動,是以它特别适用于多平台的應用程式開發,比如說我們使用蘋果的作業系統和安卓相應的http的封裝,都可以使用rest風格的應用服務,那它就避免了無謂的二次開發,提高了應用程式的開發效率。