一检号、什么是Rest?
???????Rest -- REpresentational State Transfer暇唾,全稱是 Resource Representational State Transfer(資源表現(xiàn)層狀態(tài)轉(zhuǎn)化);
???????組成一:Resource資源,即數(shù)據(jù)(網(wǎng)絡(luò)的核心),可以是一段文本悦污、一張圖片等;
???????組成二:Representational某種表現(xiàn)形式钉蒲,可以用txt格式表現(xiàn)切端,也可以用HTML格式、XML格式表現(xiàn)顷啼,JSON是目前最常用的資源表示格式踏枣;
???????組成二:State Transfer:狀態(tài)變化,通過HTTP動(dòng)詞(GET,POST,PUT,DELETE,PATCH)實(shí)現(xiàn)钙蒙。
二茵瀑、什么是Restful?
???????最初網(wǎng)頁實(shí)現(xiàn)中躬厌,前端后端是融在一起的瘾婿,比如之前的PHP,JSP等網(wǎng)站烤咧,在之前的桌面時(shí)代問題不大,但是近年來移動(dòng)互聯(lián)網(wǎng)的發(fā)展抢呆,各種類型的Client層出不窮煮嫌,RESTful可以通過一套統(tǒng)一的接口為 Web,iOS和Android提供服務(wù)抱虐,另外對于廣大平臺(tái)來說昌阿,比如Facebook platform,微博開放平臺(tái)恳邀,微信公共平臺(tái)等懦冰,它們不需要有顯式的前端,只需要一套提供服務(wù)的接口谣沸,于是RESTful更是它們最好的選擇刷钢;
???????在RESTful架構(gòu)下:Web端不再用之前典型的PHP或JSP架構(gòu),而是改為前段渲染和附帶處理簡單的商務(wù)邏輯(比如AngularJS或者BackBone的一些樣例)乳附,Web端和Server只使用上述定義的API來傳遞數(shù)據(jù)和改變數(shù)據(jù)狀態(tài)内地,格式一般是JSON。iOS和Android同理赋除,由此可見阱缓,Web,iOS举农,Android和第三方開發(fā)者變?yōu)槠降鹊慕巧ㄟ^一套API來共同消費(fèi)Server提供的服務(wù)荆针。
???????RESTful可以通過一套統(tǒng)一的接口為 Web,iOS和Android提供服務(wù),Server統(tǒng)一提供一套R(shí)ESTful API航背,web+ios+android作為同等公民調(diào)用API喉悴。
???????簡單來說,RESTful就是用URL定位資源沃粗,用HTTP描述操作:看Url就知道要什么粥惧,看http method就知道干什么,看http status code就知道結(jié)果如何最盅;
三突雪、REST的限制?
???????1)客戶端與服務(wù)器端分離(Client-Server)涡贱,優(yōu)點(diǎn)是提高了用戶界面的便捷性(操作簡單)咏删,通過簡化服務(wù)器提高可伸縮性(高性能、低成本)问词,允許組件分別優(yōu)化(可以讓服務(wù)端和客戶端分別進(jìn)行改進(jìn)和優(yōu)化);
???????2)無狀態(tài)(Stateless):無狀態(tài)的督函,即所有的資源,都可以通過URI定位激挪,而且這個(gè)定位與其他資源無關(guān)辰狡,也不會(huì)因?yàn)槠渌Y源的變化而改變;
???????有狀態(tài)和無狀態(tài)的區(qū)別:如查詢員工的工資垄分,如果查詢工資是需要登錄系統(tǒng)宛篇,進(jìn)入查詢工資的頁面,執(zhí)行相關(guān)操作后薄湿,獲取工資的多少叫倍,則這種情況是有狀態(tài)的,因?yàn)椴樵児べY的每一步操作都依賴于前一步操作豺瘤,只要前置操作不成功吆倦,后續(xù)操作就無法執(zhí)行;如果輸入一個(gè)url即可得到指定員工的工資坐求,則這種情況是無狀態(tài)的蚕泽,因?yàn)楂@取工資不依賴于其他資源或狀態(tài),且這種情況下瞻赶,員工工資是一個(gè)資源赛糟,由一個(gè)url與之對應(yīng),可以通過HTTP中的GET方法得到資源砸逊,這是典型的RESTful風(fēng)格璧南;
???????客戶端發(fā)起的每個(gè)請求都要包含服務(wù)器所需要的所有信息,提高可見性(可以單獨(dú)考慮每個(gè)請求)师逸,提高了可靠性(更容易從局部故障中修復(fù))司倚,提高可擴(kuò)展性(降低了服務(wù)器資源使用)
???????3)緩存(Cachable):服務(wù)器返回信息必須被標(biāo)記是否可以緩存,如何緩存,客戶端可能會(huì)重用之前的信息發(fā)送請求动知,優(yōu)點(diǎn):減少交互次數(shù)皿伺,減少交互的平均延遲
???????4)分層系統(tǒng)(Layered System):系統(tǒng)組件不需要知道與他交流組件之外的事情,封裝服務(wù)盒粮,引入中間層鸵鸥;優(yōu)點(diǎn):限制了系統(tǒng)的復(fù)雜性,提高可擴(kuò)展性丹皱;
???????5)統(tǒng)一接口(Uniform Interface):RESTful架構(gòu)風(fēng)格規(guī)定妒穴,數(shù)據(jù)的元操作,即CRUD(create, read, update和delete,即數(shù)據(jù)的增刪查改)操作摊崭,分別對應(yīng)于HTTP方法:GET用來獲取資源讼油,POST用來新建資源(也可以用于更新資源),PUT用來更新資源呢簸,DELETE用來刪除資源矮台,這樣就統(tǒng)一了數(shù)據(jù)操作的接口,僅通過HTTP方法根时,就可以完成對數(shù)據(jù)的所有增刪查改工作瘦赫;
????????即:GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng));
????????????????POST(CREATE):在服務(wù)器新建一個(gè)資源蛤迎;
????????????????PUT(UPDATE):在服務(wù)器更新資源(客戶端提供完整資源數(shù)據(jù))耸彪;
????????????????PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供需要修改的資源數(shù)據(jù));
????????????????DELETE(DELETE):從服務(wù)器刪除資源忘苛;
???????優(yōu)點(diǎn):提高交互的可見性,鼓勵(lì)單獨(dú)改善組件唱较;
???????6)支持按需代碼(Code-on-Demand):優(yōu)點(diǎn)是提高了可擴(kuò)展性扎唾;
參考鏈接:https://blog.igevin.info/posts/restful-architecture-in-general/