RESTFUL是一種網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì)風(fēng)格和開發(fā)方式,基于HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用于移動(dòng)互聯(lián)網(wǎng)廠商作為業(yè)務(wù)接口的場(chǎng)景,實(shí)現(xiàn)第三方OTT調(diào)用移動(dòng)網(wǎng)絡(luò)資源的功能,動(dòng)作類型為新增、變更、刪除所調(diào)用資源。
REST(英文:Representational State Transfer,簡(jiǎn)稱REST)描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,Roy Fielding是 HTTP 規(guī)范的主要編寫者之一。在目前主流的三種Web服務(wù)交互方案中,REST相比于SOAP(Simple Object Access protocol,簡(jiǎn)單對(duì)象訪問協(xié)議)以及XML-RPC更加簡(jiǎn)單明了,無論是對(duì)URL的處理還是對(duì)Payload的編碼,REST都傾向于用更加簡(jiǎn)單輕量的方法設(shè)計(jì)和實(shí)現(xiàn)。值得注意的是REST并沒有一個(gè)明確的標(biāo)準(zhǔn),而更像是一種設(shè)計(jì)的風(fēng)格。
RESTFUL 原則條件
REST 指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。
Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請(qǐng)求之間是無狀態(tài)的。從客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境。客戶端可以緩存數(shù)據(jù)以改進(jìn)性能。
在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。資源是一個(gè)有趣的概念實(shí)體,它向客戶端公開。資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫記錄、算法等等。每個(gè)資源都使用 URI (Universal Resource Identifier) 得到一個(gè)唯一的地址。所有資源都共享統(tǒng)一的接口,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。使用的是標(biāo)準(zhǔn)的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。
RESTFUL 特點(diǎn)包括
1、每一個(gè)URI代表1種資源;
2、客戶端使用GET、POST、PUT、DELETE4個(gè)表示操作方式的動(dòng)詞對(duì)服務(wù)端資源進(jìn)行操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源;
3、通過操作資源的表現(xiàn)形式來操作資源;
4、資源的表現(xiàn)形式是XML或者HTML;
5、客戶端與服務(wù)端之間的交互在請(qǐng)求之間是無狀態(tài)的,從客戶端到服務(wù)端的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。
RESTful架構(gòu)
RESTful架構(gòu)是對(duì)MVC架構(gòu)改進(jìn)后所形成的一種架構(gòu),通過使用事先定義好的接口與不同的服務(wù)聯(lián)系起來。在RESTful架構(gòu)中,瀏覽器使用POST,DELETE,PUT和GET四種請(qǐng)求方式分別對(duì)指定的URL資源進(jìn)行增刪改查操作。因此,RESTful是通過URI實(shí)現(xiàn)對(duì)資源的管理及訪問,具有擴(kuò)展性強(qiáng)、結(jié)構(gòu)清晰的特點(diǎn)。
RESTful架構(gòu)將服務(wù)器分成前端服務(wù)器和后端服務(wù)器兩部分,前端服務(wù)器為用戶提供無模型的視圖;后端服務(wù)器為前端服務(wù)器提供接口。瀏覽器向前端服務(wù)器請(qǐng)求視圖,通過視圖中包含的AJAX函數(shù)發(fā)起接口請(qǐng)求獲取模型。
項(xiàng)目開發(fā)引入RESTful架構(gòu),利于團(tuán)隊(duì)并行開發(fā)。在RESTful架構(gòu)中,將多數(shù)HTTP請(qǐng)求轉(zhuǎn)移到前端服務(wù)器上,降低服務(wù)器的負(fù)荷,使視圖獲取后端模型失敗也能呈現(xiàn)。但RESTful架構(gòu)卻不適用于所有的項(xiàng)目,當(dāng)項(xiàng)目比較小時(shí)無需使用RESTful架構(gòu),項(xiàng)目變得更加復(fù)雜。