Rest架構(gòu)與案例_第1頁(yè)
Rest架構(gòu)與案例_第2頁(yè)
Rest架構(gòu)與案例_第3頁(yè)
Rest架構(gòu)與案例_第4頁(yè)
Rest架構(gòu)與案例_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、REST架構(gòu)與案例分析恒生電子股份有限公司 | 回顧Web的發(fā)展 HTTP 主流Web服務(wù)介紹 REST抽象概念 REST式架構(gòu) - ROA REST案例分析 REST式服務(wù)框架- Restlet恒生電子股份有限公司 | HTTP(HypertextTransferProtocol) 超文本傳輸協(xié)議?NO,超文本轉(zhuǎn)移協(xié)議! URI/URL Web1.0靜態(tài)(只讀)倉(cāng)庫(kù)Web2.0雙向,交互 Web3.0 數(shù)據(jù)化,服務(wù)化,平臺(tái)化 HTMLJavaScript 富客戶(hù)端(Flex Silverlight) SOAP恒生電子股份有限公司 |客戶(hù)端服務(wù)器響應(yīng)請(qǐng)求恒生電子股份有限公司 | 方法方法(me

2、thod):表示客戶(hù)端希望服務(wù)器如何處理該信封。有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八個(gè)方法。 路徑路徑(path):請(qǐng)求鏈接里主機(jī)名后面部分,即信封上的地址。 請(qǐng)求報(bào)頭請(qǐng)求報(bào)頭(requestheaders):一組起元數(shù)據(jù)作用的鍵值對(duì),類(lèi)似信封上貼的標(biāo)簽信息。HTTP除定義了一套標(biāo)準(zhǔn)報(bào)頭外,程序也可以自己定義報(bào)頭。 實(shí)體主體實(shí)體主體(entity-body):也稱(chēng)作文檔或表示,即信封里的文檔。一般情況下,請(qǐng)求實(shí)體主體可為空。恒生電子股份有限公司 | 響應(yīng)代碼響應(yīng)代碼(responsecode):通知客戶(hù)端請(qǐng)求成功或失敗,以及如何處理信封

3、里的內(nèi)容。 響應(yīng)報(bào)頭響應(yīng)報(bào)頭(responseheader):類(lèi)似請(qǐng)求報(bào)頭。 實(shí)體主體實(shí)體主體(entity-body):同樣是放在信封里的文檔,但絕大多數(shù)情況它不會(huì)為空。恒生電子股份有限公司 | 標(biāo)準(zhǔn)報(bào)頭標(biāo)準(zhǔn)報(bào)頭Host User-Agent Accept-Charset Accept-Encoding Accept-Language If-Modified-Since Content-Type Content-Length Content-Encoding Content-Language Accept-Ranges Expires Last-Modified Etag Data WWW-

4、Authenticate Date Cache-Control 非標(biāo)準(zhǔn)非標(biāo)準(zhǔn)報(bào)頭報(bào)頭Cookie Set-Cookie X-WSSE 自定義報(bào)頭自定義報(bào)頭不重新發(fā)明已存在的報(bào)頭不將應(yīng)該放在實(shí)體主體里的信息放進(jìn)報(bào)頭命名遵循慣例,名稱(chēng)以“X-”開(kāi)頭恒生電子股份有限公司 | 狀態(tài)碼(3位數(shù)字)分類(lèi) 1xx:通知通知僅在與HTTP服務(wù)器溝通時(shí)使用 2xx:成功成功成功收到、理解和接受動(dòng)作200(“OK”)、201(“Created”)、204(“No Content”) 3xx:重定向重定向?yàn)橥瓿烧?qǐng)求,必須進(jìn)一步采取措施301(“Moved Permanently”)、303(“See Other”)

5、 4xx:客戶(hù)端錯(cuò)誤客戶(hù)端錯(cuò)誤請(qǐng)求包含錯(cuò)誤的語(yǔ)法或不能完成400(“Bad Request”)、401(“Unauthorized”)、403(“Forbidden”) 404(“Not Found”)、405(“Method Not Allowed”) 5xx:服務(wù)器端錯(cuò)誤服務(wù)器端錯(cuò)誤服務(wù)器不能完成明顯合理的請(qǐng)求 500(“Internal Server Error”)、503(“Service Unavailable”) 恒生電子股份有限公司 |恒生電子股份有限公司 | REST式面向資源的架構(gòu)具備Web特征的服務(wù):靜態(tài)網(wǎng)站、許多未采用SOAP的只讀Web服務(wù)、許多只讀型Web應(yīng)用等 PR

6、C式架構(gòu)所有采用XML-RPC遺留協(xié)議的服務(wù),幾乎所有的SOAP服務(wù) REST-RPC混合架構(gòu)大部分Web應(yīng)用,大量采用MVC模式的Web應(yīng)用恒生電子股份有限公司 | REST(Representational State Transfer) 表述性狀態(tài)轉(zhuǎn)移,一種架構(gòu)風(fēng)格 不是一個(gè)具體的標(biāo)準(zhǔn)或者架構(gòu),只是一套設(shè)計(jì)原則和一種架構(gòu)風(fēng)格 HTTP是這種架構(gòu)風(fēng)格的實(shí)現(xiàn) 一種真實(shí)描述Web的方式,不被特定時(shí)期的特定應(yīng)用程序概念歪曲,是對(duì)Web的本質(zhì)回歸 提供區(qū)分良好實(shí)踐和糟糕實(shí)踐的途徑:判斷特定實(shí)踐是否與Web架構(gòu)一致恒生電子股份有限公司 | URI規(guī)范(RFC 2396):“資源可以是任何有標(biāo)示的東西

7、”“并非所有的資源都是通過(guò)網(wǎng)絡(luò)能夠獲取的” 任何事物,只要有被引用的必要,就是一個(gè)資源(resource)。它可以是一個(gè)實(shí)物,也可以是一個(gè)抽象的概念。 通常一個(gè)資源是某個(gè)可以存放在計(jì)算機(jī)上并體現(xiàn)為比特流的事物。在Web中,可以這樣認(rèn)為資源是URI標(biāo)示的東西。恒生電子股份有限公司 | 資源和表示不是一碼事。Web上獲取的不是資源,而是資源的表示。 對(duì)于給定的資源,可以有很多不同的表示。 資源表示表示HTML表示表示XML 表示表示Text Flash 表示表示標(biāo)識(shí)符(URI)恒生電子股份有限公司 | 在客戶(hù)-服務(wù)端模式下,讓客戶(hù)端維護(hù)應(yīng)用狀態(tài),并確保服務(wù)端向服務(wù)器發(fā)出的請(qǐng)求都包含理解請(qǐng)求所需的全

8、部信息,而服務(wù)器不應(yīng)該維護(hù)該狀態(tài)。 REST式解決方案是使用URI。每個(gè)概念上獨(dú)立的資源都可使用單個(gè)URI,不希望通過(guò)Cookie或隱藏在有效負(fù)載的參數(shù)來(lái)提供額外信息。例:查看john在某網(wǎng)站2008-10-10的所有文檔資料http:/ |恒生電子股份有限公司 | 網(wǎng)絡(luò)上的所有事物都被抽象為資源 每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)URI 通過(guò)HTTP協(xié)議方法作連接器對(duì)資源進(jìn)行操作 對(duì)資源的任何操作不改變資源標(biāo)識(shí)URI 所有的服務(wù)器操作都是無(wú)狀態(tài)的恒生電子股份有限公司 | 服務(wù)端必須維持狀態(tài) 難以對(duì)URI進(jìn)行緩存 應(yīng)用部署難以水平擴(kuò)展 存在安全隱患 數(shù)據(jù)與表象混雜 無(wú)法準(zhǔn)確表達(dá)與理解請(qǐng)求含義 對(duì)不

9、同客戶(hù)端要分代碼處理 URI難以持久化 暴露技術(shù)實(shí)現(xiàn)且易變更URI 代碼方法入侵URI恒生電子股份有限公司 | 面向資源的架構(gòu)(Resource-OrientedArchitecture,ROA) 一個(gè)具體的REST式架構(gòu) 一種把實(shí)際問(wèn)題轉(zhuǎn)換成REST式Web服務(wù)的方法恒生電子股份有限公司 | 資源 資源的名稱(chēng)(URI) 資源的表示 資源間的鏈接恒生電子股份有限公司 | 某軟件的1.0.3版 一張杭州旅游地圖 QC中某個(gè)項(xiàng)目的Bug列表 某某公司04季度的營(yíng)業(yè)額 一個(gè)風(fēng)險(xiǎn)點(diǎn)或一個(gè)風(fēng)險(xiǎn)模型 某張報(bào)表某個(gè)單元格的內(nèi)容 一個(gè)流程中的一個(gè)節(jié)點(diǎn)任務(wù) 陳老師與女明星的關(guān)系 等等恒生電子股份有限公司 | U

10、RI既是資源的名稱(chēng),也是資源的地址。 一個(gè)資源必須至少有一個(gè)URI,而一個(gè)URI只能指示一個(gè)資源。 任何兩個(gè)資源不可能是同一個(gè)。 兩個(gè)不同的資源在某一時(shí)期可能指向同樣的數(shù)據(jù)。 同一資源具有多個(gè)URIs的雖然能讓引用變得更加容易,但壞處是將產(chǎn)生“稀釋效應(yīng)”,客戶(hù)端無(wú)法自動(dòng)驗(yàn)證它們是指向同一個(gè)資源。恒生電子股份有限公司 | 對(duì)于一個(gè)本身就是一些數(shù)據(jù)項(xiàng)的資源,最容易想到的一個(gè)表示就是這些數(shù)據(jù)本身。 如HTML格式的網(wǎng)頁(yè)新聞 對(duì)于代表實(shí)物或其他難以歸結(jié)為信息的事物,其表示就是關(guān)于資源的狀態(tài)的任何有用信息。 如“連上Web的自動(dòng)飲料機(jī)”提供關(guān)于實(shí)物飲料的數(shù)據(jù) 即使在一個(gè)對(duì)象的諸多表示中,已經(jīng)有一個(gè)表示包

11、含實(shí)際數(shù)據(jù)了,它也還可以有其他包含元數(shù)據(jù)的表示。 如在線書(shū)店為每本書(shū)提供該書(shū)電子版與評(píng)論兩種表示 表示的選擇信息可以放在HTTP報(bào)頭或URI中。恒生電子股份有限公司 | 大多數(shù)表示是超媒體(hypermedia)的,它不僅包含數(shù)據(jù),還包含指向其它資源的鏈接。 Roy Fielding博士論文中指出:“將超媒體作為應(yīng)用狀態(tài)的引擎”。即客戶(hù)端應(yīng)用狀態(tài)在服務(wù)器提供的“超媒體”的指引下發(fā)生變遷。恒生電子股份有限公司 | 可尋址性(addressability) 無(wú)狀態(tài)性(statelessness) 連通性(connectedness) 統(tǒng)一接口(uniforminterface)恒生電子股份有限公司

12、 | 資源是通過(guò)URI暴露的,URI是可以尋址的。http:/ “瀏覽器打開(kāi)google網(wǎng)站,搜索框輸入”陳老師”,點(diǎn)擊搜索。 服務(wù)器所能提供的每一則有價(jià)值的信息都應(yīng)該作為資源來(lái)發(fā)布。 區(qū)別資源的可尋址與應(yīng)用的可尋址:許多Web應(yīng)用不是像Web一樣可尋址的,尤其是Ajax應(yīng)用。如Gmail Web服務(wù)是可尋址的,不過(guò)調(diào)用該服務(wù)的Gmail Web應(yīng)用不是可尋址的。恒生電子股份有限公司 | 狀態(tài)分兩種:應(yīng)用狀態(tài)(applicationstate)和資源狀態(tài)(resourcestate)。前者保存在客戶(hù)端,后者保存在服務(wù)端。 每個(gè)HTTP請(qǐng)求是完全孤立。請(qǐng)求包含服務(wù)器實(shí)現(xiàn)該請(qǐng)求的全部信息,不依賴(lài)于

13、之前某個(gè)請(qǐng)求。 無(wú)狀態(tài)性意味著服務(wù)端不應(yīng)保存應(yīng)用狀態(tài),客戶(hù)端應(yīng)當(dāng)管理自己的應(yīng)用狀態(tài)。恒生電子股份有限公司 | 資源的表示“具有鏈接”的特性即連通性,它要求資源應(yīng)當(dāng)通過(guò)它們的表示彼此鏈接起來(lái)。 HTTP會(huì)話的當(dāng)前狀態(tài)不是作為資源狀態(tài)保存在服務(wù)器上的,而是被客戶(hù)端作為應(yīng)用狀態(tài)來(lái)跟蹤的。恒生電子股份有限公司 | 四個(gè)常見(jiàn)操作接口: 獲取資源的一個(gè)表示:HTTP GET 創(chuàng)建一個(gè)新資源:向一個(gè)新URI發(fā)送HTTP PUT,或向一個(gè)已有的URI發(fā)送HTTP POST 修改已有資源:向已有URI發(fā)送HTTP PUT 刪除已有資源:HTTP DELETE 兩個(gè)輔助操作接口: 獲取的一個(gè)只包含元數(shù)據(jù)的表示:H

14、TTP HEAD 查看一個(gè)資源支持那些HTTP方法:HTTP OPTIONS 安全性與冪等性: GET和HEAD請(qǐng)求是安全的 GET、HEAD、PUT和DELETE請(qǐng)求是冪等的恒生電子股份有限公司 | 創(chuàng)建資源時(shí),PUT與POST的區(qū)別: 若客戶(hù)端決定新資源的URI用PUT 若服務(wù)器決定新資源的URI用POST 在一個(gè)博客系統(tǒng)中使用PUT與POST的比較:整個(gè)博客資源(/weblogs/myweblog)博客里一片文章資源(/weblogs/myweblog/entries/1)恒生電子股份有限公司 |恒生電子股份有限公司 |1.規(guī)劃數(shù)據(jù)集2.將數(shù)據(jù)集劃分為資源 3.設(shè)計(jì)URI為資源命名 4.

15、暴露一個(gè)統(tǒng)一接口的子集 5.設(shè)計(jì)來(lái)自客戶(hù)端的表示 6.設(shè)計(jì)發(fā)給客戶(hù)端的表示 7.用超鏈接和表單把資源與已有資源聯(lián)系起來(lái) 8.考慮有哪些典型的事件經(jīng)過(guò) 9.考慮可能出現(xiàn)的錯(cuò)誤情況恒生電子股份有限公司 | 案例描述 顧客 與 服務(wù)員: 光臨KFC,排隊(duì)等候,查看食品列表,點(diǎn)餐,生成訂單,付款,在旁等候,下一位。 服務(wù)員 與 食品加工師: 接受訂單,制作食品,完成后遞交食品,下一個(gè)訂單。 服務(wù)員 與 顧客: 交付食品,顧客去享用食物。 恒生電子股份有限公司 | 顧客狀態(tài)機(jī) 食品加工師狀態(tài)機(jī)訂餐訂餐OK支付支付OK食物食物OK選定訂單選定訂單食物食物OK恒生電子股份有限公司 | 資源 URI 食物清單

16、(food list) http:/KFCS 請(qǐng)求 GET /foodlist HTTP 1.1 Host: KFCS Accept:application/xmll 響應(yīng) 200 OK Content-Type:application/xml 恒生電子股份有限公司 | 資源 URI 訂單(order) http:/KFCS 請(qǐng)求 POST /order HTTP 1.1 cocol 響應(yīng) 201 Created Location: http:/KFCS Content-Type:application/xml coco5.00 恒生電子股份有限公司 | 資源 URI 訂單(order/123

17、) http:/KFCS 可選請(qǐng)求 OPTIONS /order/123 HTTP 1.1l 可選響應(yīng) 200 OK Allow: GET, PUTl 請(qǐng)求 PUT /order/123 HTTP 1.1 Expect: 100-Continuel 響應(yīng) 200 OK 。 409 Conflict 。 使用OPTIONS 也未必能避免競(jìng)爭(zhēng) 為可選請(qǐng)求 恒生電子股份有限公司 | 資源 URI 付款(payment/order/123) http:/KFCS 請(qǐng)求 PUT / payment/order/123 HTTP 1.1 Authorization: 123456 03/11 leo 5.

18、00l 響應(yīng) 201 Created Location: http:/KFCS 意外 400 無(wú)法理解 401 認(rèn)證失敗 PUT 冪等性 恒生電子股份有限公司 | 食品加工師輪詢(xún)獲取訂單,然后選定一個(gè)訂單,制作完成,再次輪詢(xún)。 輪詢(xún)的可伸縮性差,Web的輪詢(xún)機(jī)制如何解決? 資源 URL 所有訂單(orders) http:/KFCS 請(qǐng)求 GET /orders HTTP 1.1 響應(yīng) 200 OK .l 緩存機(jī)制 代理 本地 緩存時(shí)間恒生電子股份有限公司 | 資源 URI 訂單(order/123) http:/KFCS 請(qǐng)求 PUT /order/123 HTTP 1.1 更該狀態(tài)為處理中

19、 dealingl 響應(yīng) 201 Createdl 影響 無(wú)法提交除GET外的請(qǐng)求 恒生電子股份有限公司 | 資源 URI 訂單(order/123) http:/KFCS 請(qǐng)求 DELETE /order/123 HTTP 1.1l 響應(yīng) 200 OK 恒生電子股份有限公司 | 我們可以用Web來(lái)描述所有必需的交互。我們可以利用現(xiàn)有的Web模型處理一些簡(jiǎn)單的意外的事(例如無(wú)法修改處理中或已處理完畢的訂單),而不必自己發(fā)明新的異?;蝈e(cuò)誤處理機(jī)制我們所需的一切都是HTTP現(xiàn)成提供的。而且,即便發(fā)生了那些不愉快的事,客戶(hù)端仍然可以向它們的目標(biāo)邁進(jìn)。 HTTP提供的特性起初看來(lái)是無(wú)關(guān)緊要的。但這個(gè)協(xié)議現(xiàn)在已經(jīng)取得廣泛的一致、并得到廣泛的部署了,而且所有的軟件與硬件都能一定程度上理解它。當(dāng) 我

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論