RESTful设计原则和样例(开发前后台接口)
參考博文: http://www.cnblogs.com/artech/p/restful-web-api-02.html ???
維基百科:https://zh.wikipedia.org/wiki/REST
目前在三種主流的Web服務(wù)實(shí)現(xiàn)方案中,因?yàn)镽EST模式與復(fù)雜的SOAP和XML-RPC相比更加簡(jiǎn)潔,越來越多的web服務(wù)開始采用REST風(fēng)格設(shè)計(jì)和實(shí)現(xiàn)。例如,Amazon.com提供接近REST風(fēng)格的Web服務(wù)進(jìn)行圖書查找;雅虎提供的Web服務(wù)也是REST風(fēng)格的。
?
要點(diǎn)及標(biāo)準(zhǔn)
?
需要注意的是,REST是設(shè)計(jì)風(fēng)格而不是標(biāo)準(zhǔn)。REST通常基于使用HTTP,URI,和XML以及HTML這些現(xiàn)有的廣泛流行的協(xié)議和標(biāo)準(zhǔn)。
-
資源是由URI來指定。
-
對(duì)資源的操作包括獲取、創(chuàng)建、修改和刪除資源,這些操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。
-
通過操作資源的表現(xiàn)形式來操作資源。
-
資源的表現(xiàn)形式則是XML或者HTML,取決于讀者是機(jī)器還是人,是消費(fèi)web服務(wù)的客戶軟件還是web瀏覽器。當(dāng)然也可以是任何其他的格式。
REST的要求
-
客戶端和服務(wù)器結(jié)構(gòu)
-
連接協(xié)議具有無狀態(tài)性
-
能夠利用Cache機(jī)制增進(jìn)性能
-
層次化的系統(tǒng)
-
所需代碼 -?JavaScript?(可選)
關(guān)于狀態(tài)
應(yīng)該注意區(qū)別應(yīng)用的狀態(tài)和連接協(xié)議的狀態(tài)。HTTP連接是無狀態(tài)的(也就是不記錄每個(gè)連接的信息),而REST傳輸會(huì)包含應(yīng)用的所有狀態(tài)信息,因此可以大幅降低對(duì)HTTP連接的重復(fù)請(qǐng)求資源消耗。
應(yīng)用于 Web 服務(wù)
符合 REST 設(shè)計(jì)風(fēng)格的 Web API 稱為?RESTful API。它從以下三個(gè)方面資源進(jìn)行定義:
-
直觀簡(jiǎn)短的資源地址:URI,比如:http://example.com/resources/。
-
傳輸?shù)馁Y源:Web服務(wù)接受與返回的互聯(lián)網(wǎng)媒體類型,比如:JSON,XML?,YAML?等。
-
對(duì)資源的操作:Web服務(wù)在該資源上所支持的一系列請(qǐng)求方法(比如:POST,GET,PUT或DELETE)。
下表列出了在實(shí)現(xiàn) RESTful API 時(shí) HTTP 請(qǐng)求方法的典型用途。
[1]?HTTP 請(qǐng)求方法在 RESTful API 中的典型應(yīng)用| 列出?URI,以及該資源組中每個(gè)資源的詳細(xì)信息(后者可選)。 | 使用給定的一組資源替換當(dāng)前整組資源。 | 在本組資源中創(chuàng)建/追加一個(gè)新的資源。 該操作往往返回新資源的URL。 | 刪除?整組資源。 |
| 獲取?指定的資源的詳細(xì)信息,格式可以自選一個(gè)合適的網(wǎng)絡(luò)媒體類型(比如:XML、JSON等) | 替換/創(chuàng)建?指定的資源。并將其追加到相應(yīng)的資源組中。 | 把指定的資源當(dāng)做一個(gè)資源組,并在其下創(chuàng)建/追加一個(gè)新的元素,使其隸屬于當(dāng)前資源。 | 刪除?指定的元素。 |
PUT 和 DELETE 方法是冪等方法。GET方法是安全方法?(不會(huì)對(duì)服務(wù)器端有修改,因此當(dāng)然也是冪等的)。
不像基于SOAP的Web服務(wù),RESTful Web服務(wù)并沒有的“正式”標(biāo)準(zhǔn)[2]。 這是因?yàn)镽EST是一種架構(gòu),而SOAP只是一個(gè)協(xié)議。雖然REST不是一個(gè)標(biāo)準(zhǔn),但在實(shí)現(xiàn)RESTful Web服務(wù)時(shí)可以使用其他各種標(biāo)準(zhǔn)(比如HTTP,URL,XML,PNG等)。
實(shí)現(xiàn)舉例[編輯]
例如,一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)商店應(yīng)用,
列舉所有商品,
GET?http://www.store.com/products呈現(xiàn)某一件商品,
GET?http://www.store.com/product/12345下單購(gòu)買,
POST?http://www.store.com/order <purchase-order><item>?...?</item1> </purchase-order>REST的優(yōu)點(diǎn)
-
可更高效利用緩存來提高響應(yīng)速度
-
通訊本身的無狀態(tài)性可以讓不同的服務(wù)器的處理一系列請(qǐng)求中的不同請(qǐng)求,提高服務(wù)器的擴(kuò)展性
-
瀏覽器即可作為客戶端,簡(jiǎn)化軟件需求
-
相對(duì)于其他疊加在HTTP協(xié)議之上的機(jī)制,REST的軟件依賴性更小
-
不需要額外的資源發(fā)現(xiàn)機(jī)制
-
在軟件技術(shù)演進(jìn)中的長(zhǎng)期的兼容性更好
默認(rèn)所有輸入輸出均為JSON格式。一個(gè)例外:GET請(qǐng)求的參數(shù)為URL參數(shù)
出錯(cuò)代碼一律使用HTTP標(biāo)準(zhǔn)錯(cuò)誤碼,參見HTTP 標(biāo)準(zhǔn)狀態(tài)碼
修改用戶:
????URL: POST /mm/v1/crm/customer/[customer id]
輸入:
參數(shù)名 參數(shù)類型 說明 必填 默認(rèn)值 限制
name string 客戶名稱 是 ??
interface_person string 對(duì)接人姓名 是 ??
interface_phonenumber string 對(duì)接人電話 是 ??
interface_email string 對(duì)接人郵箱 是 ??
輸出:
參數(shù)名 參數(shù)類型 說明 樣例值
id int 客戶ID 10001
name string 客戶名稱 銀行
interface_person string 對(duì)接人姓名 小明
interface_phonenumber string 對(duì)接人電話 12345678
interface_email string 對(duì)接人郵箱 misdfu@asdfasdf.com
create_time date 客戶創(chuàng)建時(shí)間 2015-04-01 12:34:56
獲得所有可編輯權(quán)限
URL: GET /mm/v1/crm/permission
輸入
輸出
一個(gè)數(shù)組。每個(gè)元素代表一個(gè)可編輯的權(quán)限項(xiàng),格式如下
參數(shù)名 參數(shù)類型 說明 樣例值
id int 權(quán)限ID 1
name string 權(quán)限名稱 DEMO APP
刪除用戶
URL:DELETE /mm/v1/crm/customer/[customer id]
輸入:無
輸出:
參數(shù)名 ????參數(shù)類型 ????說明???? ????????????樣例值
id???????????? int????? 成功刪除的客戶ID???? 10001
總結(jié)
以上是生活随笔為你收集整理的RESTful设计原则和样例(开发前后台接口)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 03-Windows Server 20
- 下一篇: 动态规划问题之一马当先