這個概念其實對于后端開發(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)。現(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ì)鏈接,可以參考
看在畫圖畫到吐血的份上竖伯,高抬貴手存哲,點個贊吧