火龍果軟件-REST式架構(gòu)及實(shí)踐匯編_第1頁
火龍果軟件-REST式架構(gòu)及實(shí)踐匯編_第2頁
火龍果軟件-REST式架構(gòu)及實(shí)踐匯編_第3頁
火龍果軟件-REST式架構(gòu)及實(shí)踐匯編_第4頁
火龍果軟件-REST式架構(gòu)及實(shí)踐匯編_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 REST(Representational State Transfer):表述性狀態(tài)轉(zhuǎn)移,分布式超媒體軟件的一種架構(gòu)風(fēng)格。源自2000年Roy Thomas Fielding的博士論文。 一套簡單的設(shè)計(jì)原則、一種架構(gòu)風(fēng)格(或模式),不是一種具體的標(biāo)準(zhǔn)或架構(gòu)。 基于使用HTTP、URI等現(xiàn)有的廣泛流行的協(xié)議和標(biāo)準(zhǔn),并由幾個(gè)核心抽象概念支撐。 對(duì)Web的本質(zhì)回歸:一種真實(shí)描述Web的方式,不被特定時(shí)期的特定應(yīng)用程序概念歪曲。 提供區(qū)分良好實(shí)踐和糟糕實(shí)踐的途徑:判斷特定實(shí)踐是否與Web架構(gòu)一致。2堪稱Web架構(gòu)設(shè)計(jì)領(lǐng)域的“圣經(jīng)”中文版下載3 HTTP(Hypertext Transfer Pro

2、tocol):超文本傳輸協(xié)議。一種基于文檔的輕量級(jí)網(wǎng)絡(luò)協(xié)議,建立在可靠性和擴(kuò)展性高的TCP/IP協(xié)議基礎(chǔ)之上。 URL(Uniform Resource Locator):通用資源定位符,一種文檔地址的表示方案,是Web1.0的關(guān)鍵。例:http:/ /user/doc.html 指定協(xié)議 定位符,對(duì)應(yīng)域名系統(tǒng)對(duì)應(yīng)大部分文件系統(tǒng)層次結(jié)構(gòu) HTML(Hypertext Markup Language):超文本標(biāo)識(shí)語言,一種基于標(biāo)簽的簡單文檔格式,主要顯示靜態(tài)網(wǎng)頁內(nèi)容。5 Web1.0的誤區(qū):對(duì)大多數(shù)用戶而言,Web不過是一個(gè)只讀文件倉庫! Web2.0顛覆用戶錯(cuò)誤觀念:Web不再是簡單的文檔倉庫

3、!Web是雙向的! 重新審視Web作為全球信息空間的概念, Web2.0更加豐富的含義:“Web數(shù)據(jù)”和“平臺(tái)化的Web”。 底層基礎(chǔ)設(shè)施未變化,真正的區(qū)別:使用基礎(chǔ)設(shè)施的方式。 網(wǎng)站就是Web服務(wù),Web作為分布式編程平臺(tái)具備極大的潛力。6HTTP:信封里的文檔 HTTP協(xié)議的形象理解: 信封格式有嚴(yán)格標(biāo)準(zhǔn),不關(guān)心里面內(nèi)容??蛻舳朔?wù)器響應(yīng)請(qǐng)求 方法方法(method):表示客戶端希望服務(wù)器如何處理該信封。有GET、POST、PUT、DELETE、HEAD、OPTION、TRACE和CONNECT八個(gè)方法。 路徑路徑(path):請(qǐng)求鏈接里主機(jī)名后面部分,即信封上的地址。 請(qǐng)求報(bào)頭請(qǐng)求報(bào)頭(

4、request headers):一組起元數(shù)據(jù)作用的鍵值對(duì),類似信封上貼的標(biāo)簽信息。HTTP除定義了一套標(biāo)準(zhǔn)報(bào)頭外,程序也可以自己定義報(bào)頭。 實(shí)體主體實(shí)體主體(entity-body):也稱作文檔或表示,即信封里的文檔。一般情況下,請(qǐng)求實(shí)體主體可為空。9 響應(yīng)代碼響應(yīng)代碼(response code):通知客戶端請(qǐng)求成功或失敗,以及如何處理信封里的內(nèi)容。 響應(yīng)報(bào)頭響應(yīng)報(bào)頭(response header):類似請(qǐng)求報(bào)頭。 實(shí)體主體實(shí)體主體(entity-body):同樣是放在信封里的文檔,但絕大多數(shù)情況它不會(huì)為空。10 標(biāo)準(zhǔn)報(bào)頭標(biāo)準(zhǔn)報(bào)頭Host、 User-Agent、Accept、Allow

5、、Accept-Charset、Accept-Encoding、Accept-Language、Range、If-Modified-Since、If-None-Match、AuthorizationContent-Type、Content-Length、Content-Range、Location、Content-MD5、Content-Location、 Content-Encoding、Content-Language、Accept-Ranges、Expires、Last-Modified、ETag、WWW-AuthenticateDate、Cache-Control 非標(biāo)準(zhǔn)報(bào)頭非標(biāo)準(zhǔn)報(bào)頭

6、Cookie、Set-Cookie、X-WSSE 自定義報(bào)頭自定義報(bào)頭不重新發(fā)明已存在的報(bào)頭不將應(yīng)該放在實(shí)體主體里的信息放進(jìn)報(bào)頭命名遵循慣例,名稱以“X-”開頭11 狀態(tài)碼(3位數(shù)字)分類 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”)、304(“Not Modified”)、307(“Temporary Redirect”) 4xx:客

7、戶端錯(cuò)誤客戶端錯(cuò)誤請(qǐng)求包含錯(cuò)誤的語法或不能完成400(“Bad Request”)、401(“Unauthorized”)、403(“Forbidden”)、404(“Not Found”)、405(“Method Not Allowed”)、406(“Not Acceptable”) 、409(“Conflict”)、410(“Gone”) 5xx:服務(wù)器端錯(cuò)誤服務(wù)器端錯(cuò)誤服務(wù)器不能完成明顯合理的請(qǐng)求500(“Internal Server Error”)、503(“Service Unavailable”)1213URL+URN URI(Uniform Resource Identifie

8、r):通用資源標(biāo)識(shí)符,它被設(shè)計(jì)充當(dāng)可用位置和持久名稱。 URL提供資源定位方法,依賴于命名和位置機(jī)制。 URN(Uniform Resource Name)需要是全球惟一的,并且在資源不存在或不再可用時(shí)依然保持不變。 URI可為定位器、名稱,或兩者兼具,取決于標(biāo)識(shí)符分配中的持久性和命名機(jī)構(gòu)對(duì)其關(guān)注程度。不論在哪里都可以對(duì)URI作出一致的解釋,通常沒有必要刻意區(qū)分它們。14 語法規(guī)則:大致指向一個(gè)層次空間,協(xié)議是樹根,從左往右每部分是前部分的分支。例:http:/ /site/page ? name=張三 # photo方案 域名 路徑 查詢 片段 路徑:并非一定要采用層次結(jié)構(gòu),可根據(jù)應(yīng)用程序模

9、型定制路徑結(jié)構(gòu)。例:某標(biāo)記系統(tǒng) http:/del.icio.us / john / owl 用戶名 標(biāo)記 查詢:URI中非層次部分,通常后臺(tái)數(shù)據(jù)庫應(yīng)用程序要使用它。 片段:用于標(biāo)示下一級(jí)資源,只在客戶端有效。瀏覽器HTML中常對(duì)應(yīng)頁面錨點(diǎn)。15 “優(yōu)秀的URI不會(huì)改變”Tim Berners-Lee 最大限度地延長URI生命周期的保障:1.獨(dú)立于技術(shù)2.層次結(jié)構(gòu)和集合3.末尾的斜杠和位置無關(guān) 最大限度降低修改URI造成的負(fù)面影響:1.永久性重定向資源2.暫時(shí)重定向資源3.不應(yīng)該使用的重定向方法4.服務(wù)器端重定向16 URI規(guī)范(RFC 2396)指出:“資源可以是任何有標(biāo)示的東西”;“并非所

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

11、方案是使用URI。每個(gè)概念上獨(dú)立的資源都可使用單個(gè)URI,不希望通過Cookie或隱藏在有效負(fù)載的參數(shù)來提供額外信息。例:查看john在某網(wǎng)站2008-10-10的所有文檔資料http:/ 網(wǎng)絡(luò)上的所有事物都被抽象為資源 每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)URI 通過HTTP協(xié)議方法作連接器對(duì)資源進(jìn)行操作 對(duì)資源的任何操作不改變資源標(biāo)識(shí)URI 所有的服務(wù)器操作都是無狀態(tài)的21 服務(wù)端必須維持狀態(tài)難以對(duì)URI進(jìn)行緩存應(yīng)用部署難以水平擴(kuò)展存在安全隱患 數(shù)據(jù)與表象混雜無法準(zhǔn)確表達(dá)與理解請(qǐng)求含義對(duì)不同客戶端要分代碼處理 URI難以持久化暴露技術(shù)實(shí)現(xiàn)且易變更URI代碼方法入侵URI不利于搜索引擎22 RES

12、T式面向資源的架構(gòu)具備Web特征的服務(wù):靜態(tài)網(wǎng)站、許多未采用SOAP的只讀Web服務(wù)、許多只讀型Web應(yīng)用等 PRC式架構(gòu)所有采用XML-RPC遺留協(xié)議的服務(wù),幾乎所有的SOAP服務(wù) REST-RPC混合架構(gòu)大部分Web應(yīng)用,大量采用MVC模式的Web應(yīng)用24POST /rpc HTTP/1.1.getApp21325POST search/beta2 HTTP/1.1Host:Content-Type:application/soap+xmlSOAPAction: urn:GoogleSearchActionREST26GET services/rest?api_key=xxx&method

13、=flickr.photos.search&tags=penguin HTTP/1.1Host:GET member/corporation/crpHome!ListByUserId.jspa HTTP/1.1Host:27 盡管HTTP是共用的,但在兩個(gè)問題上的做法不同Q1:客戶端如何傳遞自己的意圖到服務(wù)端,讓它知道請(qǐng)求到底是獲取、創(chuàng)建、修改或是刪除數(shù)據(jù)?Q2:服務(wù)端如何知曉具體操作那些數(shù)據(jù)? 根源:對(duì)Web的理解的不同,實(shí)際應(yīng)當(dāng)與Web的理念保持一致28Method Infomation 方式一:使用HTTP方法 方式二:放到請(qǐng)求URI路徑里 方式三:放入實(shí)體主體或HTTP報(bào)頭29(Sco

14、ping Infomation) 方式一:放到請(qǐng)求URI路徑里 方式二:放入實(shí)體主體30 面向資源的架構(gòu)(Resource-Oriented Architecture,ROA) 一個(gè)具體的REST式架構(gòu) 一種把實(shí)際問題轉(zhuǎn)換成REST式Web服務(wù)的方法32 資源 資源的名稱(URI) 資源的表示 資源間的鏈接33 某軟件的1.0.3版 某軟件的最新版本 某天發(fā)布到taobao上的第一件商品 一張杭州旅游地圖 QC中某個(gè)項(xiàng)目的Bug列表 某某公司04季度的營業(yè)額 大于1024的最小素?cái)?shù) 某批三鹿奶粉的三聚氰胺含量檢驗(yàn)結(jié)果 陳冠希與張柏芝兩人間的關(guān)系34 URI既是資源的名稱,也是資源的地址。 一個(gè)

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

16、提供該書電子版與評(píng)論兩種表示 表示的選擇信息可以放在HTTP報(bào)頭或URI中。36 大多數(shù)表示是超媒體(hypermedia)的,它不僅包含數(shù)據(jù),還包含指向其它資源的鏈接。 Roy Fielding博士論文中指出:“將超媒體作為應(yīng)用狀態(tài)的引擎”。即客戶端應(yīng)用狀態(tài)在服務(wù)器提供的“超媒體”的指引下發(fā)生變遷。37 可尋址性(addressability) 無狀態(tài)性(statelessness) 連通性(connectedness) 統(tǒng)一接口(uniform interface)38 資源是通過URI暴露的,URI是可以尋址的。http:/ =“瀏覽器打開google網(wǎng)站,搜索框輸入jellyfish,

17、點(diǎn)擊搜索” 服務(wù)器所能提供的每一則有價(jià)值的信息都應(yīng)該作為資源來發(fā)布。 區(qū)別資源的可尋址與應(yīng)用的可尋址:許多Web應(yīng)用不是像Web一樣可尋址的,尤其是Ajax應(yīng)用。如Gmail Web服務(wù)是可尋址的,不過調(diào)用該服務(wù)的Gmail Web應(yīng)用不是可尋址的。39 狀態(tài)分兩種:應(yīng)用狀態(tài)(application state)和資源狀態(tài)(resource state)。前者保存在客戶端,后者保存在服務(wù)端。 每個(gè)HTTP請(qǐng)求是完全孤立。請(qǐng)求包含服務(wù)器實(shí)現(xiàn)該請(qǐng)求的全部信息,不依賴于之前某個(gè)請(qǐng)求。 無狀態(tài)性意味著服務(wù)端不應(yīng)保存應(yīng)用狀態(tài),客戶端應(yīng)當(dāng)管理自己的應(yīng)用狀態(tài)。40 資源的表示“具有鏈接”的特性即連通性,它要

18、求資源應(yīng)當(dāng)通過它們的表示彼此鏈接起來。 HTTP會(huì)話的當(dāng)前狀態(tài)不是作為資源狀態(tài)保存在服務(wù)器上的,而是被客戶端作為應(yīng)用狀態(tài)來跟蹤的。41 四個(gè)常見操作接口:獲取資源的一個(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ù)的表示:HTTP HEAD查看一個(gè)資源支持那些HTTP方法:HTTP OPTIONS 安全性與冪等性:GET和HEAD請(qǐng)求是安全的GET、HEAD、PUT和DELETE請(qǐng)求是冪等的42 創(chuàng)建資

19、源時(shí),PUT與POST的區(qū)別:若客戶端決定新資源的URI用PUT若服務(wù)器決定新資源的URI用POST 在一個(gè)博客系統(tǒng)中使用PUT與POST的比較:整個(gè)博客資源(/weblogs/myweblog)博客里一片文章資源(/weblogs/myweblog/entries/1)4344向新資源發(fā)送PUT請(qǐng)求向已有資源發(fā)送PUT請(qǐng)求POST/weblogsN/A(資源已存在)N/A(無效果)創(chuàng)建一個(gè)新博客/weblogs/myweblog創(chuàng)建該博客修改該博客的設(shè)置往博客里添加一篇文章/weblogs/myweblog/entries/1N/A(客戶端不可能預(yù)知URI)編輯該博客文章為該博客文章添加評(píng)論 問:一個(gè)事件日志服務(wù),只暴露一個(gè)日志資源,其URI為/log,那么如何向其中追加日志信息? 答:將日志條目看做獨(dú)立資源,采用POST方法,向其父資源表示添加新數(shù)據(jù),達(dá)到向已有日志資源添加從屬信息的目的。451.規(guī)劃數(shù)據(jù)集2.將數(shù)據(jù)集劃分為資源對(duì)于每個(gè)資源:3.設(shè)計(jì)URI為資源命名4.暴露一個(gè)統(tǒng)一接口的子集5.設(shè)計(jì)來自客戶端的表示6.設(shè)計(jì)發(fā)給客戶端的表示7.用超鏈接和表單把資源與

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論