RESTful知識要點(diǎn)小結(jié)

          REST是新一代的web service設(shè)計(jì)標(biāo)準(zhǔn),關(guān)于REST的定義,以及同傳統(tǒng)SOAP相比較的優(yōu)略,這里就不羅嗦了,以后可以直接google。
          這里先總結(jié)一下目前學(xué)到的REST相關(guān)知識。
          REST中存在兩個很重要的概念:資源 和 狀態(tài)轉(zhuǎn)移,一定要以這兩個概念為核心,再去了解其他的如緩存、安全等方面。好了,廢話少說,直接看總結(jié):

          1. 定義資源

          REST的首要步驟之一就是定義資源。將客戶端對URL的訪問定義成對不同資源的訪問。


          2. 定義統(tǒng)一接口

          HTTP是一種應(yīng)用協(xié)議,而不僅僅是傳輸協(xié)議。HTTP定義了諸如GET、PUT、DELETE、POST等方法對資源進(jìn)行操作。有了他們,我們無需創(chuàng)造createOrder, getStatus, updateStatus等應(yīng)用程序特定的操作了。

          所以,能否從HTTP基礎(chǔ)設(shè)施中獲得多少利益,主要取決于您把它當(dāng)做應(yīng)用層協(xié)議用的有多好。

          GET用于獲取資源

          PUT用于更新資源

          POST用于創(chuàng)建資源

          DELETE用于刪除資源


          3. 定義表述(Representation)

          資源是一個抽象的實(shí)體,因此需要在響應(yīng)時定義一種對資源的表述。表述的類型有很多種格式,常見的有xml、json、PDF、CSV等等


          4. 使用鏈接(link)實(shí)現(xiàn)狀態(tài)轉(zhuǎn)移

          鏈接(link)提供了一種方式,幫助你從一種資源轉(zhuǎn)移到另外一種資源,這種方式正好解釋了REST中Transfer的含義。譬如,當(dāng)使用GET獲取一個1000條資源的列表時,如果當(dāng)前的表述無法包括所有的的資源,則可以在當(dāng)前表述中加上-“前頁”/“后頁”等的內(nèi)部鏈接,從而幫助客戶端完成對剩余資源獲取的轉(zhuǎn)移。

          如下定義的表述中返回一組書籍的列表,同時在結(jié)果中定義了對"prev"和"next"等狀態(tài)的轉(zhuǎn)移。

           

          {
              "results": [{
                  "price": "25"
                  "name": "java in action",
                  "title": "java in action",
                  "category": "IT",
                  "isbn": "109422476",
                  "description": "xxxx"},
               {
                  "price": "40"
                  "name": "Ruby in action",
                  "title": "Ruby in action",
                  "category": "IT",
                  "isbn": "109422479",
                  "description": "xxxx"}
              ]
              "links": [
              {
                  "uri": "xxxx",
                  "rel": "prev"
              },
              {
                  "uri": "xxxx",
                  "rel": "next"
              }],
              "available-results": 200
          }    

           

          另外,關(guān)于流程的狀態(tài)遷移,可以一步一步按照客戶端發(fā)出的請求返回符合條件的鏈接。

          比如流程是A->B->C->D,當(dāng)請求A時,實(shí)際上并不知道接下來能否滿足條件訪問B,只有當(dāng)服務(wù)器成功響應(yīng)請求A后,在A的響應(yīng)中加入對資源B的鏈接,此時,客戶端才可以繼續(xù)訪問B的請求。

          以此類推,達(dá)到了流程化中對多種資源狀態(tài)轉(zhuǎn)移的實(shí)現(xiàn)。


          5. 安全

           可以采用2種方式:

           1)當(dāng)客戶端訪問一個受保護(hù)資源時,可以設(shè)置Authenticate頭,對<認(rèn)證用戶名>:<Secret>采用base64編碼,發(fā)送給服務(wù)器端.此種方式可以詳見HTTP協(xié)議。

           2)客戶端先發(fā)送請求,包括用戶名和加密過的密碼,服務(wù)器響應(yīng)后,返回特殊的key,客戶端下次訪問時候,攜帶上該key,例如

          客戶端采用POST發(fā)送請求:

           

          {
               "email":"xxxxx",
              "password":"xxxx"
          }

           

          服務(wù)器端返回請求:

           

          {
              "email":"xxxx"
              key:"xxxxxxxxxxxxx"
          }

           

          當(dāng)客戶端需要再次訪問受限資源時,可以附帶上該key,這樣服務(wù)器端就知道請求的操作是否能訪問受限資源了。

          6. 緩存

             緩存可以幫助增加可靠性、減少服務(wù)器開銷、降低成本等。REST的緩存主要是利用HTTP協(xié)議的緩存機(jī)制,如Header中的no-cache、Expire、Cache-Control等


          posted on 2012-06-15 08:38 想飛就飛 閱讀(1708) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          公告


          導(dǎo)航

          <2012年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          統(tǒng)計(jì)

          常用鏈接

          留言簿(13)

          我參與的團(tuán)隊(duì)

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 晋城| 新平| 台东县| 洮南市| 康乐县| 九江县| 怀来县| 大洼县| 芮城县| 新乡市| 长乐市| 嘉禾县| 汝南县| 思南县| 高州市| 正镶白旗| 沈阳市| 汽车| 奉节县| 通许县| 玛多县| 崇阳县| 腾冲县| 登封市| 牟定县| 朔州市| 修水县| 临桂县| 平南县| 安宁市| 南汇区| 南澳县| 镇雄县| 东光县| 兴化市| 南靖县| 海宁市| 巍山| 易门县| 乐平市| 扎鲁特旗|