REST基礎(chǔ)及實(shí)例開發(fā)課件_第1頁
REST基礎(chǔ)及實(shí)例開發(fā)課件_第2頁
REST基礎(chǔ)及實(shí)例開發(fā)課件_第3頁
REST基礎(chǔ)及實(shí)例開發(fā)課件_第4頁
REST基礎(chǔ)及實(shí)例開發(fā)課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

REST基礎(chǔ)及實(shí)例開發(fā)黃曉娜2011-11-22REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)

理解出錯(cuò)處

REST(RepresentationStateTransfer:表述性狀態(tài)轉(zhuǎn)移)描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如web應(yīng)用程序。REST從資源的角度來描述整個(gè)網(wǎng)絡(luò),分布在各處的資源由URI確定,而客戶端的應(yīng)用通過URI來獲取資源的表征。獲得這些特征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應(yīng)用不斷地在轉(zhuǎn)變這其狀態(tài),也即所謂的表述狀態(tài)轉(zhuǎn)移。REST是設(shè)計(jì)風(fēng)格。它通?;谑褂肏TTP,URI,和XML以及HTML這些現(xiàn)有的協(xié)議和標(biāo)準(zhǔn)。REST指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是RESTful。注意:REST中的資源指的不是數(shù)據(jù),而是數(shù)據(jù)和表現(xiàn)形式的組合,比如“訪問次數(shù)”和“下載次數(shù)”在數(shù)據(jù)上可能有重疊或者完全相同,而由于他們的表現(xiàn)形式不同,所以被歸為不同的資源REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

網(wǎng)絡(luò)上的所有事物都被抽象為資源-應(yīng)用程序?qū)ο?、?shù)據(jù)庫記錄、算法等。

每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí)符(URI)。

通過通用的連接器接口(GET,PUT,POST,DELETE)對(duì)資源進(jìn)行操作。對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí)符。

所有操作都是無狀態(tài)的。每個(gè)HTTP請(qǐng)求都是孤立的,每個(gè)請(qǐng)求都必須包含自己的參數(shù)來完成操作。如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境??蛻舳丝梢跃彺鏀?shù)據(jù)以改進(jìn)性能。分層系統(tǒng):組件無法了解它與之交互的中間層以外的組件。通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。REST設(shè)計(jì)原則包括客戶-服務(wù)器、無狀態(tài)、緩存、統(tǒng)一接口、分層系統(tǒng)等。REST原則的無狀態(tài)指服務(wù)器端不保存客戶應(yīng)用狀態(tài),連接→請(qǐng)求→響應(yīng)→斷開,客戶的上一次請(qǐng)求與下一個(gè)請(qǐng)求沒有關(guān)系。服務(wù)器端響應(yīng)客戶請(qǐng)求返回資源的表述及相關(guān)鏈接,該表述的本身就是客戶的當(dāng)前狀態(tài),客戶按照表述中提供的鏈接選擇下一個(gè)表述,遷移到下一個(gè)狀態(tài)。也就是服務(wù)器通過表述為狀態(tài)遷移提供指導(dǎo),而狀態(tài)的遷移權(quán)掌控在用戶手里,客戶根據(jù)自己的需要選擇鏈接,由當(dāng)前狀態(tài)遷移到下一個(gè)狀態(tài)。

HTTP請(qǐng)求方法在RESTfulweb中的應(yīng)用資源GETPUTPOSTDELETE一組資源的URI,比如/resources/列出

URI,以及該資源組中每個(gè)資源的詳細(xì)信息(后者可選)可緩存,冪等使用給定的一組資源替換當(dāng)前整組資源。在本組資源中創(chuàng)建/追加一個(gè)新的資源。該操作往往返回新資源的URI。不緩存,不冪等刪除整組資源。單個(gè)資源的URI,比如/resources/142獲取指定的資源的詳細(xì)信息,格式可以自選一個(gè)合適的網(wǎng)絡(luò)媒體類型(比如:XML、JSON等)替換/創(chuàng)建指定的資源。并將其追加到相應(yīng)的資源組中。只有在客戶端能夠決定資源的URI時(shí)才能使用把指定的資源當(dāng)做一個(gè)資源組,并在其下創(chuàng)建/追加一個(gè)新的元素,使其隸屬于當(dāng)前資源。刪除指定的元素。REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

分析用例,找到可以“創(chuàng)建”、“讀取”、“更新”或“刪除”動(dòng)作來操作的領(lǐng)域名詞,每個(gè)領(lǐng)域名詞都可標(biāo)識(shí)為資源。使用POST,GET,DELETE,PUT對(duì)其進(jìn)行操作。某些情況下,例如:生成隨機(jī)數(shù);為客戶端提供一個(gè)方法,在一個(gè)請(qǐng)求中,獲取最小屬性集的用戶檔案;列出最近10張用戶上傳的照片;將錢從一個(gè)銀行賬戶轉(zhuǎn)到另一個(gè)銀行賬戶(轉(zhuǎn)賬)等??梢宰R(shí)別出名詞但是如果將這些名詞設(shè)別為資源,會(huì)發(fā)現(xiàn)相應(yīng)的動(dòng)作沒有辦法映射到HTTP方法上。這是需要額外的資源來處理這些用例。REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別

RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

Restlet:由eromeLouvel和DavePawson開發(fā),它實(shí)現(xiàn)針對(duì)各種RESTful系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括Web服務(wù)。在Restlet框架中,客戶端和服務(wù)器都是組件。組件通過連接器互相通信。JSR-311是SunMicrosystems的規(guī)范,可以為開發(fā)RESTfulWeb服務(wù)定義一組JavaAPI。Jersey是對(duì)JSR-311的參考實(shí)現(xiàn)。JSR-311提供一組注釋,相關(guān)類和接口都可以用來將Java對(duì)象作為Web資源展示。該規(guī)范假定HTTP是底層網(wǎng)絡(luò)協(xié)議。它使用注釋提供URI和相應(yīng)資源類之間的清晰映射,以及HTTP方法與Java對(duì)象方法之間的映射。API支持廣泛的HTTP實(shí)體內(nèi)容類型,包括HTML、XML、JSON、GIF、JPG等。它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過應(yīng)用程序添加其他類型。

REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI)理解出錯(cuò)處

安裝JDK,Tomcat并配置變量。

安裝Eclipse或MyEclipse

在Jersey官網(wǎng)上下載所需的jar包

Jersey框架所依賴的包客戶端解析JSON所需的包REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備

服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

在Myeclipse開發(fā)環(huán)境中創(chuàng)建一個(gè)JavaWeb工程。添加jar包到web工程的類路徑

直接添加,把jar包c(diǎn)opy到WebRoot/WEB-INF/lib

在工程的根目錄下創(chuàng)建lib文件夾,copyjar包到lib,

配置Build-path

OKOK轉(zhuǎn)賬業(yè)務(wù)應(yīng)用場(chǎng)景:當(dāng)用戶輸入貸款賬戶(LoanAccountid),借款賬戶(Borrowerid)和借款金額(LoanAmounts)后,點(diǎn)擊轉(zhuǎn)賬,客戶端調(diào)用服務(wù)端的轉(zhuǎn)賬資源,修改CustomerAccount表,使貸款賬戶余額減少LoanAmounts,借款賬戶月增加LoanAmounts。Web工程結(jié)構(gòu)

AccountService代碼

CustomerAccount代碼Javabean文件,其與數(shù)據(jù)庫表結(jié)構(gòu)對(duì)應(yīng),用于封裝數(shù)據(jù)對(duì)象,以便在服務(wù)端和數(shù)據(jù)端傳送數(shù)據(jù)

修改配置文件web.xml<servlet><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param><param-name>perty.packages</param-name><param-value>account.service</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><url-pattern>/accountres/*</url-pattern></servlet-mapping>

資源文件所在的包名<servlet-name>RestfulContainer</servlet-name><servlet-name>RestfulContainer</servlet-name>訪問資源基路徑REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)存在問題迷惑

部署

點(diǎn)擊“Finish”,啟動(dòng)tomcat

REST基礎(chǔ)REST概念REST設(shè)計(jì)原則RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署

客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI)理解出錯(cuò)處

可以在AOM,F(xiàn)lex,Myeclipse下開發(fā)restfulweb的客戶端訪問應(yīng)用程序

客戶端應(yīng)用程序通過Jersey提供的jersey-client.jar與服務(wù)端通信

部分代碼//定義一個(gè)客戶端Clientc=Client.create();//獲取指定URI下資源WebResourcer=c.resource("9:8080/transiation1/accountres/account/tran");//定義一個(gè)MultivalueMap存儲(chǔ)參數(shù)MultivaluedMap<String,String>queryParams=newMultivaluedMapImpl();queryParams.add("loanAccountid",fromid);queryParams.add("loanAmounts",num);queryParams.add("borrowerid",toid);ClientResponseresponse=r.get(ClientResponse.class);System.out.println(r.queryParams(queryParams).get(String.class));

訪問客戶端(:6888/RestfulClient/restful.faces)REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

動(dòng)態(tài)創(chuàng)建URI:在REST中的POST中,創(chuàng)建一個(gè)具有唯一URI的資源,當(dāng)此資源創(chuàng)建成功后,就可以通過此URI訪問該資源。Example:創(chuàng)建一個(gè)添加用戶的頁面,并把用戶的ID作為訪問此用戶URI的一部分。

用戶在瀏覽器上輸入http://localhost:8080/Example/rest/contacts,并輸入ID,Name點(diǎn)擊“submit”如下所示:

用戶在瀏覽器上輸入http://localhost:8080/Example/rest/contacts/0001,

將會(huì)調(diào)用GET方法把ID為0001的信息以XML或JSON的形式顯示,如下:

具體實(shí)現(xiàn)REST提供了@context注釋,可以引入上下文對(duì)象(Request、Response、UriInfo、ServletContext)

此例子中使用UriInfo類的方法創(chuàng)建URI@POST@Produces(MediaType.TEXT_HTML)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)publicvoidnewContact(@FormParam("id")Stringid,@FormParam("name")Stringname,@ContextHttpServletResponseservletResponse)throwsIOException{………URIuri=uriInfo.getAbsolutePathBuilder().path(id).build();Response.created(uri).build();}

詳細(xì)代碼

HTML頁面腳本REST常用注釋@Path:與根路徑結(jié)合形成子資源的URI@PathParam:將參數(shù)注入?yún)?shù)的路徑@QueryParam:普通參數(shù)傳遞@FormParam:表明此參數(shù)從HTML屬性確定的表單輸入@Produces:響應(yīng)支持MediaType類型,表示服務(wù)端返回到客戶端的參數(shù)類型@Consumes:響應(yīng)支持MediaType類型,表示客戶端傳遞到服務(wù)端的參數(shù)類型@Context:引入上下文對(duì)象REST基礎(chǔ)REST概念REST設(shè)計(jì)原則資源的識(shí)別RestfulWeb服務(wù)的java框架實(shí)例開發(fā)(轉(zhuǎn)賬業(yè)務(wù))環(huán)境準(zhǔn)備服務(wù)端開發(fā)服務(wù)部署客戶端訪問

補(bǔ)充(動(dòng)態(tài)創(chuàng)建URI及REST常用注釋)理解出錯(cuò)處

針對(duì)于POST和GET的理解不夠透徹,通過查閱資料可知這幾個(gè)動(dòng)詞的操作對(duì)象是資源集合,但是可以為GET指定一個(gè)path(URI),并創(chuàng)建資源(在GET對(duì)應(yīng)的方法中寫一段代碼實(shí)現(xiàn)某一個(gè)功能)例如: @GET@Path(“add") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.TEXT_PLAIN) publicStringadd(@QueryParam("num1")@

溫馨提示

  • 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)論