Web服務開發(fā) 第03章 04-RESTful_第1頁
Web服務開發(fā) 第03章 04-RESTful_第2頁
Web服務開發(fā) 第03章 04-RESTful_第3頁
Web服務開發(fā) 第03章 04-RESTful_第4頁
Web服務開發(fā) 第03章 04-RESTful_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

服務計算與SOA開發(fā)

-Web服務開發(fā)技術

ServicesComputing&SOADevelopment授課教師:文斌

2014SpringHainanNormalUniversity1授課內容

01SOA及服務計算基本概念

02HTTP和XML03Web服務

04WSDL

05SOAP

06業(yè)務流程與服務組合

07主流的Web服務開發(fā)工具

08SOA應用開發(fā)案例2授課內容

01SOA及服務計算基本概念

02HTTP和XML03Web服務

04WSDL

05SOAP

06業(yè)務流程與服務組合

07主流的Web服務開發(fā)工具

08SOA應用開發(fā)案例3Web服務4概述SOAP、WSDL、UDDI通常被認為是Web服務的支撐協(xié)議,通過上面章節(jié)對HTTP和XML協(xié)議的講解,有助于我們了解Web服務的基本設計思路。規(guī)范與協(xié)議定義了關于Web服務最基本的特征,但涉及具體實現(xiàn)這些特征的細節(jié),卻沒有做出深入的決定。而各個軟件提供商,會根據(jù)自己現(xiàn)有產品的特征,遵循規(guī)范來提供自己的Web服務平臺。本章將從程序開發(fā)的角度來剖析Web服務的開發(fā)及運行過程。5Web服務.NET系列JAVA系列IBMSCA/SDORESTfulWeb服務6REST是什么?WhyRESTful

?RESTfulWebService!7在這個流量=金錢的時代8為什么要了解REST:API數(shù)據(jù)角度從數(shù)據(jù)上來看:互聯(lián)網程序員不了解RESTAPI可以嗎?9為什么要了解REST:同行數(shù)據(jù)角度/apis/directory/1?sort=mashups10為什么要了解REST:AmazoneCommerceVS

TaobaoTopREST +SOAP(85:15)REST11REST、RESTful???RoyThomasFielding博士2000年提出REST是英文RepresentationalStateTransfer的縮寫表象化狀態(tài)轉變或者表述性狀態(tài)轉移REST是Web服務的一種架構風格REST一種新型的分布式軟件設計架構使用HTTP、URI等廣泛流行的標準和協(xié)議12到底是什么REST是一種設計風格。它不是一種標準,也不是一種軟件,而是一種思想。REST通?;谑褂肏TTP,URI,和XML以及HTML這些現(xiàn)有的廣泛流行的協(xié)議和標準。13一個簡單扼要的定義REST定義了應該如何正確地使用(這和大多數(shù)人的實際使用方式有很大不同)Web標準,例如HTTP和URI。如果你在設計應用程序時能堅持REST原則,那就預示著你將會得到一個使用了優(yōu)質Web架構的系統(tǒng)。

----------StefanTilkov

14Http協(xié)議你知道多少?1:http的請求方法有多少?2:請求包頭你知道多少?3:返回碼呢?GET

請求獲取Request-URI所標識的資源POST

在Request-URI所標識的資源后附加新的數(shù)據(jù)HEAD

請求獲取由Request-URI所標識的資源的響應消息報頭PUT

請求服務器存儲一個資源,并用Request-URI作為其標識PATCHTRACE

請求服務器回送收到的請求信息,主要用于測試或診斷CONNECT保留將來使用OPTIONS請求查詢服務器的性能,或者查詢與資源相關的選項和需求15什么是RESTRepresentationalStateTransfer(表述性狀態(tài)轉移),簡稱REST,來自RoyFielding的博士論文:《ArchitecturalStylesandtheDesignofNetwork-basedSoftwareArchitectures》(《架構風格與基于網絡的軟件架構設計》)RoyFielding是DaySoftware公司的首席科學家,Apache軟件基金會的合作創(chuàng)始人,在美國加洲大學歐文分校獲得博士學位,HTTP、URI等Web標準的主要設計者16

REST架構的主要原則網絡上的所有事物都可被抽象為資源(Resource)每個資源都有一個唯一的資源標識符(ResourceIdentifier)同一資源具有多種表現(xiàn)形式(xml、json等)對資源的各種操作不會改變資源標識符所有的操作都是無狀態(tài)的(Stateless)Ps:符合REST原則的架構方式即可稱為RESTful17資源、資源、資源處處皆資源(Resource):2010公司的銷售數(shù)據(jù)小明09年一月份看過的書正在上映的電影公司銷售的產品清單……REST與資源REST面向的對象是資源RE——表現(xiàn),即mediatype的設計。ST——通過跟蹤超鏈接實現(xiàn)狀態(tài)遷移。18資源與URIDesignRESTful風格的一大特色就是使用URI來標示資源URI和URLhttp:///users/

http:///users/{user}(oneforeachuser)http:///findUserFormhttp:///locations/http:///locations/{location}(oneforeachlocation)http:///findLocationForm19REST從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表征。獲得這些表征致使這些應用程序轉變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應用不斷地在轉變著其狀態(tài),所謂表征狀態(tài)轉移(RepresentationalStateTransfer)。REST是一種的分布式應用架構風格,HTTP1.1是基于REST架構風格設計的。其他分布式引用架構風格1:分布式對象(RMI/EJB/HSF)2:遠程過程調用(SOAP/XML-RPC/JSON-RPC/HESSION)20RESTfulHTTP方案中的所有資源都繼承自類似于這樣的一個類:classResource{

Resource(URIu);Responseget();Responsepost(Requestr);Responseput(Requestr);Responsedelete();}21指導思想:REST的架構約束客戶端-服務器無狀態(tài)緩存統(tǒng)一接口分層系統(tǒng)按需代碼(可選約束,我沒搞懂)22資源操作http:///users/GET:獲取一個資源

POST:創(chuàng)建一個新的資源

PUT

:修改一個資源的狀態(tài)

DELETE:刪除一個資源

23資源展現(xiàn)XmlJsonXhtmlRSS/AtomOtherMediatypes24返回數(shù)據(jù)1:xml序列化耗時返回的數(shù)據(jù)把顯得有點大很想說的是twitterstreamapi拋棄了xml2:Json簡單清晰數(shù)據(jù)包小提示:不要json-lib,選擇jackson來序列化josnTaobao,amazon都返回json

,xml2種格式3:atomAtom供稿格式(AtomSyndicationFormat)是用于網站消息來源,基于XML的文檔格式。GoogleDataAPI和豆瓣都是基于Atom格式的返回4:RSS25資源多重表述什么是資源表述?它是一段對于資源在某一個特定時刻的狀態(tài)描述,資源表述有多種格式,最常見的是HTML/XML/JSON純文本。26無狀態(tài)性無狀態(tài)性使得客戶端和服務器端不必保存對方的詳細信息,服務器只需要處理當前Request,而不必了解前面Request的歷史無狀態(tài)性減少了服務器從局部錯誤中恢復的任務量,可以非常方便地實現(xiàn)FailOver技術,從而很容易地將服務器組件部署在集群內無狀態(tài)性使得服務器端不必在多個Request中保存狀態(tài),從而可以更容易地釋放資源無狀態(tài)性無需服務組件保存Request狀態(tài),因此可讓服務器充分利用Pool技術來提高穩(wěn)定性和性能27指導思想(續(xù)):REST的五條關鍵原則為所有“事物”定義ID(URI)將所有事物鏈接在一起使用標準方法資源多重表述無狀態(tài)通信28為什么要基于API開發(fā)WEB是開放的時代,twitter的30W個客戶端構造了操作壁壘,讓google,facebook無法追趕;API讓web,手機客戶端,桌面多種操作成為可能,程序員分工更加明確,切降低了開發(fā)成本;軟件開發(fā)依賴解耦讓編程語言發(fā)揮各自的優(yōu)勢。29REST導致的變化30RESTFULAPI一種基于http協(xié)議和rest架構策略的一種簡單webservice,包含以下特征:Web服務的基本URI,如

http:///feed/review/latestWeb服務接受與返回的互聯(lián)網媒體類型,比如:JSON,XML,YAML等。Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。API必須是超文本驅動31HTTP在RESTFULAPI中的典型應用RESOURCEGETPOSTPUTDELETEPATCH

http:///feed/review/latestselectinsertupdatedeletePartialupdateGET/PUT/DELETE/PATCH方法:冪等的,POST是不冪等的POST/PUT/DELETE/PATCH方法:不安全的,GET是安全的32簡單實例:Python框架Web.py的實現(xiàn)RESTFULAPI然后配置urls

=

('/item/(.*)',‘item')。好吧,我承認這是我見過的最簡單實現(xiàn)restfulAPI的框架!詳細地址:/2008/09/20/getting-restful-with-webpy/33思考1:其實都可以GET實現(xiàn),都用GET方式的害處?2:POST也可以實現(xiàn)很多功能,POST方式的害處?3:Servlet規(guī)范JSR154,JSR315定義了哪些方法?34JavaAPIforRESTfulWebServices:JSR-311JSR-311(JAX-RS:JavaAPIforRESTfulWebServices)旨在定義一個統(tǒng)一的規(guī)范,使得Java程序員可以使用一套固定的接口來開發(fā)REST應用。特征:使用POJO編程模型基于Annotation的配置集成了JAXB,35JAX-RS提供的標注將資源類@Path,標注資源類或方法的相對路徑@GET,@PUT,@POST,@DELETE,標注方法是用的HTTP請求的類型@Produces,標注返回的MIME媒體類型@Consumes,標注可接受請求的MIME媒體類型@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分別標注方法的參數(shù)來自于HTTP請求的不同位置,例如@PathParam來自于URL的路徑,@QueryParam來自于URL的查詢參數(shù),@HeaderParam來自于HTTP請求的頭信息,@CookieParam來自于HTTP請求的Cookie。36代碼示例@GET@Produces({MediaType.APPLICATION_JSON})@Path("/book/{id}")publicBookgetBook(@PathParam("id")Stringid){returnnewBook("huhu","huhu");}@PUT@Path("/book/{name}")publicvoidupdateBook(@PathParam("name")PathSegmentbook){

Iterator<Book>it=books.iterator();Stringname=String.valueOf(book.getMatrixParameters().get("name"));Stringcontent=String.valueOf(book.getMatrixParameters().get("content"));

while(it.hasNext()){Bookbooktmp=it.next();

if(name.equals(booktmp.getName())){

booktmp.setContent(content);break;}}}37訪問示例GET/calendar/feeds/userID/private-magicCookie/fullPOSThttps:///calendar/feeds/default/private/fullPUT/calendar/feeds/default/owncalendars/full/calendarIDDELETE/calendar/feeds/default/owncalendars/full/calendarIDPATCH/calendar/feeds/default/private/full/eventID38JAX-RS的實現(xiàn)ApacheCXF,開源的Web服務框架。Jersey,由Sun提供的JAX-RS的參考實現(xiàn)。RESTEasy,JBoss的實現(xiàn)。Restlet,由JeromeLouvel和DavePawson開發(fā),是最早的REST框架,先于JAX-RS出現(xiàn)題外話:Spring3.0直接支持restful風格的編碼了。39目前的restful框架目前宣稱支持REST風格Webservice的Java框架包括以下這些:Restlet

JerseyRESTEasy(JBoss的),CXFSpring3.0也支持REST了,還有國人做的一個輕量框架JRest4GuicePhp和python40您選擇框架要考慮的產品成熟度,是否有成熟團隊,社區(qū)文檔是否齊全和常見框架的集成(例如:Spirng)對流行協(xié)議的支持(Atom,Oauth)配置的簡易程度性能是否容易上手……41前置URI42流程鑒權業(yè)務處理返回數(shù)據(jù)43開始階段JAVA框架選擇JSR311的實現(xiàn)文檔齊全支持spring,oauth,atom支持jetty的集成配置有點郁悶44REST優(yōu)勢使用REST的最佳的場景是對外提供公開的服務,也就是所謂的OpenAPI,也有的人認為RESt更適合資源導向的網站,像youtube這樣的網站。REST的真正價值在于WebServices,而不是通過瀏覽器操作的應用程序。45當我們用瀏覽器訪問一個網址時,瀏覽器會構造一個HTTP請求。這個請求有一個頭信息,其中包括了本次請求接受何種類型的數(shù)據(jù)。46將用戶界面和數(shù)據(jù)存儲分離,提高用戶界面跨多個服務平臺一個好的架構應該可以很輕松的為不同的請求返回不同格式的數(shù)據(jù)。47RESTful優(yōu)缺點SOAP、WSDL、WS*SOWHYREST?

RPC樣式的架構中,關注點在于方法,而在REST樣式的架構中,關注點在于資源REST輕量級、HTTP無狀態(tài)請求可以由任何可用服務器回答,分布式、緩存、云計算資源唯一URI、標準接口基于成熟HTTP的安全模型Simplicity、human-friendly……48REST不是什么?REST不是技術

REST不是CRUD49目前restful的web應用Google的Gdata豆瓣的OpenAPIAmazon的S3等等都是REST的50RESTful.NETREST在.NET平臺下的最佳實踐WCFRESTfulProgrammingModelHostingWCFRESTfulServicesSecuringRESTEndpoints51前提準備WCFRESTServiceStartKit

visualstudio2008sp1

.netframework3.5sp1Fiddler(客戶端調試)52URIhttp://localhost:8080/rest/Userhttp://localhost:8080/rest/User/{userName}http://localhost:8080/rest/User/xml ///<summary>

///用戶信息 ///</summary> [DataContract(Name="User")] publicclassUserInfo

{ [DataMember] publicstringUserName

溫馨提示

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

評論

0/150

提交評論