REST以及RESTful的理解

這個概念其實對于后端開發(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ì)鏈接,可以參考

看在畫圖畫到吐血的份上,高抬貴手,點個贊吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容