這個概念其實對于后端開發(fā)人員應(yīng)該不陌生,簡單總結(jié)一句話來說
RESTful是一種針對Web,iOS,Android和第三方開發(fā)者變?yōu)槠降鹊慕巧ㄟ^一套API來共同消費Server提供的服務(wù)的協(xié)議。
客戶端開發(fā)人員對于這個概念可能會陌生一點,但是其實一直都在使用或者參與這個協(xié)議的實施。
一、 首先為什么要用RESTful結(jié)構(gòu)呢?
? 因為在移動互聯(lián)網(wǎng)真正到來之前,網(wǎng)頁是前端后端融在一起的,比如之前的PHP,JSP等。在之前的PC時代問題不大,但是近年來移動互聯(lián)網(wǎng)的發(fā)展,各種類型的Client層出不窮,RESTful可以通過一套統(tǒng)一的接口為 Web,iOS和Android提供服務(wù)。另外對于廣大平臺來說,比如Facebook platform,微博開放平臺,微信公共平臺等,它們不需要有顯式的前端,只需要一套提供服務(wù)的接口,于是RESTful更是它們最好的選擇。在RESTful架構(gòu)下:

二、API事例
下面我們來視圖寫一個例子,來讓大家理解下
restful 認(rèn)為一切皆是資源, API 應(yīng)該是對資源(比如某視屏網(wǎng)站或者視頻軟件上的龍媽或者雪諾視頻集錦)的狀態(tài)的轉(zhuǎn)化。
一、基本原則
url 路徑中只應(yīng)該包含資源標(biāo)識符
比如,獲取龍媽視頻,非RESTful API可能是這樣的
/GetLongma
這個業(yè)務(wù)中,PO是一種資源(看成龍媽的視頻集錦),restful 風(fēng)格的 API 應(yīng)該應(yīng)該是
/Longma
那么,怎么表示這個API是獲取的的呢?
利用 http method 定義資源狀態(tài)轉(zhuǎn)化
上面這個例子,可以用GET定義方法來獲得龍媽視頻
GET ?/longma
restful 一般用http method來標(biāo)志資源狀態(tài)的轉(zhuǎn)化,有以下四種方式:
POST 創(chuàng)建
PUT 更新
GET 獲取
DELETE 刪除
所以,對于視頻,它的創(chuàng),更新,獲取,刪除,API如下
POST /longma ? ? ?(比如你上傳一個龍媽的視頻)
PUT /longma/:id? ? ? ? ? (比如你修改了之前你上傳的那個龍媽的視頻,增加了你自己的旁白什么的,然后保存更新)
GET /longma/:id? ? ? ? ? (比如你自己去網(wǎng)站上搜索你之前上傳的那個龍媽的視頻)
DELETE /longma/:id? ? (比如你覺得不好看,然后要刪除你之前上傳的龍媽視頻)
上面的例子,其實實際業(yè)務(wù)一般不會這么簡單,比如該視頻的作者或者說上傳者都會從屬于某一個用戶,所以API的結(jié)構(gòu)會是下面這樣,以 PUT 為例
PUT /user/:userid/longma/:videoid
這里就引申出一個值得討論的話題,如何設(shè)計從屬關(guān)系?從業(yè)務(wù)實體上設(shè)計從屬關(guān)系可能會遇到一些困難,比如,某些情況下,父資源的創(chuàng)建可能會依賴子資源的創(chuàng)建。一般情況下,如果開銷不大的話,可以重新設(shè)計一下業(yè)務(wù)。比如,已經(jīng)上傳的視頻必須從屬于一個user,那么業(yè)務(wù)上就規(guī)定必須先注冊(創(chuàng)建user)或者登陸,才能上傳視頻。
三、大白話圖文講解原理
如果還看不明白,撞墻100下
首先,首先我們假設(shè)上海有個女孩叫小美,她是一個龍媽的粉絲,然后有一天小美想用電腦看龍媽的精彩錦集視頻。她做了如下四步:

這基本上就是一個傳統(tǒng)的電腦軟件的架構(gòu)?,F(xiàn)在我們看看如何把這個傳統(tǒng)的電腦軟件變成RESTful架構(gòu)的軟件。
我們把小美家的電腦主機從上海搬到北京,而小美的顯示器則仍然留在家里。

然后我們把之前連接電腦主機和顯示器的“電線”換成“互聯(lián)網(wǎng)”,并且把四個部件(顯示器,主機,視頻文件,騰訊視頻軟件)的名字換成:客戶端,服務(wù)器,資源,瀏覽器。

為了在茫?;ヂ?lián)網(wǎng)世界中準(zhǔn)確快速的找到那臺服務(wù)器并觀看“龍媽集錦”,我們需要給在北京的這臺服務(wù)器加一個標(biāo)識符,也就是常說的Url。 同時,為了區(qū)分服務(wù)器中的“龍媽集錦”和“雪諾集錦”,我們也需要給這兩個視頻單獨加上標(biāo)識符。

這個服務(wù)器當(dāng)然不只有龍媽和雪諾的視頻,還有其他千千萬萬的視頻,以及音樂,表單和網(wǎng)頁等等東西。服務(wù)器上放不下這么多東西,所以需要把這些東西移到數(shù)據(jù)庫里面放著。

這樣,整個RESTFul的架構(gòu)基本上就成型了。我們來看看小美今天應(yīng)該如何觀看龍媽的視頻。
步驟1. 小美打開瀏覽器。注意此時小美家中的電腦硬盤里面沒有存任何視頻,視頻存在北京的數(shù)據(jù)庫里面。

步驟2.小美輸入http://www.youku.cn/longma客戶端通過互聯(lián)網(wǎng)找到http://www.youku.cn的服務(wù)器,然后服務(wù)器根據(jù)longma在數(shù)據(jù)庫里找到了龍媽的視頻, 并把視頻數(shù)據(jù)通過互聯(lián)網(wǎng)傳回給了小美的客戶端。這個操作就是我們常說的GET。

步驟3. 小美開心地觀看傳回來的視頻,但是她不想在視頻中看到龍馬的敗家老哥。

步驟4. 她通過瀏覽器或者騰訊視頻軟件剪掉了敗家老哥的部分,點擊了”提交“,然后服務(wù)器接到這個請求之后把修改保存到數(shù)據(jù)庫里面,并且告訴小美”你的修改已經(jīng)保存。這個操作就是我們常說的POST。

我們來對比一下之前的單機情況下。
騰訊視頻的文件路徑 = REST軟件的Url
騰訊視頻的打開操作 = REST軟件HTTP的GET
騰訊視頻的保存操作 = REST軟件HTTP的POST
當(dāng)然,還有很多細(xì)節(jié),不過這就是REST軟件框架的一個大概樣子。
四、后記
這邊放一個關(guān)于RESTful的協(xié)議規(guī)范定義的詳細(xì)鏈接,可以參考
看在畫圖畫到吐血的份上,高抬貴手,點個贊吧
