<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    活到老,學到老

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks

        這本書的前面三章主要講了一下基本概念,客戶端程序,和Amazon的S3,這篇博客總結一下第四章,個人感覺有很多重要的概念。
        面向資源的架構(The Resource-Oriented Architecture),這里的資源必須要有一個URI,資源和URI的關系:一個資源可能有一個或多個URI,而一個URI只能指定一個資源。

        Restful WS的特性:
        1、可尋址性(Addressability)
            資源通過URI來暴露給用戶,可尋址性是最基本的特性。由于可尋址性,你可以把URI保存在你的書簽里,你可以把鏈接發給別人,而不用把Html文件下載下來發給別人,也可以通過URI對資源進行緩存。

        2、無狀態性(Statelessness
            無狀態性意味著每個HTTP請求是完全隔離的。每次客戶端發送請求都必須帶上所有服務器端需要的信息。    
            無狀態的應用更容易分布到有負責均衡的多臺服務器上;無狀態性也更容易緩存:緩存工具只需要看這一個請求,和任何其他請求無關。
            應用狀態和資源狀態(Application State Versus Resource State
            應用狀態位于客戶端,而資源狀態位于服務器端,對于客戶端,每個客戶端都有各自的應用狀態,例如:在google搜索,你可能搜索某個單詞且當前頁是第3頁,我可能搜索另一個單詞且在第一頁,所以每個客戶端都有一個應用狀態。當客戶端發起請求的時候,必須告訴服務器你的應用狀態,比如你當前要看某個單詞搜索結果的第幾頁,服務器端返回結果上有其他鏈接,這些鏈接客戶端可能作為未來的請求。
            而對于資源狀態,對于每個客戶端都是相同的,就是服務器上的資源。  
      
        3、表述性(Representations
            表述性,就是資源的表現形式,相同的資源可以有不同的表述性,比如同一個bug列表可以用XML文檔表示,也可以用文本方式表示等等。對于同一資源的不同的Representation,如何知道客戶端請求哪一種呢?作者建議不同的Representation使用不同的URI。

        4、連通性(Links and Connectedness
            簡單點說,就是返回的結果中有對其他資源的鏈接(URI),比如google搜索,搜索結果可能有其他頁的鏈接。

        5、統一的接口(The Uniform Interface
            也就是說Restful WS使用HTTP的基本方法作為他的方法的表示,主要使用HTTP的四個方法:GET,PUT,DELETE,POST。HEAD和OPTIONS用的比較少。
            取得某個資源的表述的時候使用GET。
            創建一個新的資源的時候,PUT到一個新的URI,或者POST到一個已經存在的URI。
            修改資源,使用PUT到存在的URI。
            刪除資源使用DELETE。
            PUT和POST都可以創建新的資源,那有什么區別呢?POST可以創建從屬資源,如一個webblog程序通過資源(/weblogs/myweblog)暴露每個blog,而某個blog下面的條目作為從屬資源為/weblogs/myweblog/entries/1,當你需要增加一個條目的時候,你可以POST到父資源/weblogs/myweblog,同樣PUT也可以完成這個工作,在這里POST和PUT的區別是:當客戶端可以控制新資源的URI的時候,則使用PUT,比如blog的下面的某篇文章使用名字來訪問,如/weblogs/myweblog/entries/restful_ws_1(這樣某個博客下面的文章不能重復),則當你發表一篇新文章的時候,可以PUT到新的URI如/weblogs/myweblog/entries/restful_ws_2來創建資源。而如果客戶端不能控制URI的時候,比如blog是通過服務器端某個序列號來訪問,客戶端是無法知道下一個序號是什么,這時只能使用POST,這種POST如果創建成功,則返回201,響應頭中的Location可以保護新創建資源的URI。
            還有一個區別,POST對某個存在的資源更新時,一般是追加(append),比如說對某個日志文件做POST,則把日志追加到原日志的后面。如果是PUT則進行的是替換,所以PUT是等冪的,而POST不是(后面會講)。

            安全(Safety)
            GET和HEAD方法只是獲取資源的表述,所以是安全的。當然也可能有一些副作用,比如有些服務端會記錄GET的次數等。

            等冪性(Idempotence)
            等冪性簡單點說就是一次請求和多次請求,資源的狀態是一樣。比如GET和HEAD,不論你請求多少次,資源還是在那里。請注意,DELETE和PUT也是等冪的,以為對同一個資源刪除一次或者多次,結果是一樣的,就是資源被刪除了,不存在了。為什么說PUT也是等冪的?當你PUT一個新資源的時候,資源被創建,再次PUT這個URI的時候,資源還是沒變。當你PUT一個存在的資源時,更新了資源,再次PUT的時候,還是更新成這個樣子。在PUT更新的時候,不能做相對的更新(依賴資源現在的狀態),比如每次對一個數加1,這樣資源狀態就會變化。應該每次更新成某個數,比如把某個數變成4,則無論多少次PUT,值都是4,這樣就是等冪了。
            我們設計Restful WS的時候,GET,HEAD, PUT, DELETE一定要設計成等冪的。由于網絡是不可靠的,安全性和等冪性就顯得特別重要。如果一次請求,服務器收到處理以后,客戶端沒有收到相應,客戶端會再次請求,如果沒有等冪性保障,就會發生意想不到的問題。
            POST是不安全也不等冪的,還是拿weblog的例子,如果兩次POST相同的博文,則會產生兩個資源,URI可能是這樣/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2,盡管他們的內容是一摸一樣的。
            

        

    posted on 2011-03-30 21:59 simon.shen 閱讀(2039) 評論(0)  編輯  收藏 所屬分類: Java企業開發
    主站蜘蛛池模板: 亚洲爆乳少妇无码激情| 亚洲熟女综合一区二区三区| fc2免费人成在线视频| 国产高清在线免费视频| 免费国产黄网站在线看| 狠狠久久永久免费观看| 国产区图片区小说区亚洲区| 国产男女猛烈无遮挡免费视频网站| 亚洲日韩国产二区无码| 在线免费观看韩国a视频| 婷婷国产偷v国产偷v亚洲| 免费在线黄色网址| 一二三区免费视频| 国产亚洲一区二区手机在线观看| 日本免费大黄在线观看| 亚洲大香人伊一本线| 久久不见久久见免费影院 | 亚洲精品无码永久在线观看你懂的 | 好紧我太爽了视频免费国产| 久久99国产亚洲高清观看首页| 在线观看免费无码专区| 日本一区二区三区日本免费| 一级毛片免费在线观看网站| 亚洲Av永久无码精品三区在线| 91福利视频免费| 蜜臀亚洲AV无码精品国产午夜.| 亚洲午夜无码AV毛片久久| 欧洲人免费视频网站在线| 亚洲娇小性色xxxx| 亚洲av高清在线观看一区二区 | 亚洲视频免费在线看| 亚洲精品永久在线观看| 国产91精品一区二区麻豆亚洲 | 天天天欲色欲色WWW免费| 一个人免费观看www视频| 99亚洲精品高清一二区| 国产福利免费在线观看| a毛片全部免费播放| 亚洲综合精品伊人久久| 亚洲精品无码AV人在线播放| 成人免费福利视频|