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

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

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

    http://www.tkk7.com/ebecket 返還網(wǎng)
    隨筆-140  評論-11  文章-131  trackbacks-0
    先前我曾經(jīng)介紹過利用Apache Axis實現(xiàn)基于SOAP的Web Service實現(xiàn)技術(shù)和相關(guān)代碼,總的來說,SOAP的Web Service解決方案雖然較為成熟,且安全性較好,但是使用門檻較高,在大并發(fā)情況下會有性能問題,在互聯(lián)網(wǎng)上使用不太普及,因此并不太適合Web 2.0網(wǎng)站服務(wù)使用,目前大量的Web 2.0網(wǎng)站使用另外一種解決方案——REST。

      REST的架構(gòu)設(shè)計

      REST(Representational State Transfer)是一種輕量級的Web Service架構(gòu)風(fēng)格,其實現(xiàn)和操作明顯比SOAP和XML-RPC更為簡潔,可以完全通過HTTP協(xié)議實現(xiàn),還可以利用緩存Cache來提高響應(yīng)速度,性能、效率和易用性上都優(yōu)于SOAP協(xié)議。

      REST架構(gòu)遵循了CRUD原則,CRUD原則對于資源只需要四種行為:Create(創(chuàng)建)、Read(讀取)、Update(更新)和Delete(刪除)就可以完成對其操作和處理。這四個操作是一種原子操作,即一種無法再分的操作,通過它們可以構(gòu)造復(fù)雜的操作過程,正如數(shù)學(xué)上四則運算是數(shù)字的最基本的運算一樣。

      REST架構(gòu)讓人們真正理解我們的網(wǎng)絡(luò)協(xié)議HTTP本來面貌,對資源的操作包括獲取、創(chuàng)建、修改和刪除資源的操作正好對應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法,因此REST把HTTP對一個URL資源的操作限制在GET、POST、PUT和DELETE這四個之內(nèi)。這種針對網(wǎng)絡(luò)應(yīng)用的設(shè)計和開發(fā)方式,可以降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。

      REST的設(shè)計準則

      REST架構(gòu)是針對Web應(yīng)用而設(shè)計的,其目的是為了降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。REST提出了如下設(shè)計準則:

      網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource);

      每個資源對應(yīng)一個唯一的資源標識符(resource identifier);

      通過通用的連接器接口(generic connector interface)對資源進行操作;

      對資源的各種操作不會改變資源標識符;

      所有的操作都是無狀態(tài)的(stateless)。

      使用REST架構(gòu)

      對于開發(fā)人員來說,關(guān)心的是如何使用REST架構(gòu),這里我們來簡單談?wù)勥@個問題。REST不僅僅是一種嶄新的架構(gòu),它帶來的更是一種全新的Web開發(fā)過程中的思維方式:通過URL來設(shè)計系統(tǒng)結(jié)構(gòu)。REST是一套簡單的設(shè)計原則、一種架構(gòu)風(fēng)格(或模式),不是一種具體的標準或架構(gòu)。REST有很多成功的使用案例,著名的Delicious和Flickr都提供基于REST風(fēng)格的API使用,客戶端調(diào)用也極其方便,下面是我用ASP寫的一個很簡單的REST舉例,從中可以看出REST是多么的簡單易用。

      客戶端代碼:

    Private Function httpGet(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url + "?" + data, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (Null)
        If (xmlhttp.Status = 200) Then httpGet = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpPost(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (data)
        If (xmlhttp.Status = 200) Then httpPost = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpPut(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (data)
        If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
            response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
        Else
            response.write xmlhttp.responseText
        End If
        If (xmlhttp.Status = 200) Then httpPut = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    Private Function httpDelete(url, method, data)
        Dim xmlhttp
        Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        xmlhttp.open method, url + "?" + data, False
        xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        xmlhttp.setRequestHeader "Content-Length", Len(data)
        xmlhttp.send (Null)
        If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
            response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
        Else
            response.write xmlhttp.responseText
        End If
        If (xmlhttp.Status = 200) Then httpDelete = xmlhttp.responseText
        Set xmlhttp = Nothing
    End Function

    response.write httpPost("http://localhost/rest/service.asp", "POST", "do=POST")
    response.write httpGet("http://localhost/rest/service.asp", "GET", "do=GET")
    response.write httpPut("http://localhost/rest/service.asp", "PUT", "do=PUT")
    response.write httpDelete("http://localhost/rest/service.asp", "DELETE", "do=DELETE")

      服務(wù)端代碼:

    Response.Write Request.ServerVariables("REQUEST_METHOD")
    If (Request.ServerVariables("REQUEST_METHOD")="GET") Then
     Response.Write "DO GET" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="POST") Then
     Response.Write "DO POST" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="PUT") Then
     Response.Write "DO PUT" + Request("do")
    ElseIf (Request.ServerVariables("REQUEST_METHOD")="DELETE") Then
     Response.Write "DO DELETE" + Request("do")
    End if

      需要注意的是,IIS服務(wù)器默認是不支持ASP文件的PUT和DELETE操作,默認會返回“403 - Forbidden”錯誤,因此需要修改IIS的設(shè)置,修改方法是:管理根據(jù)-IIS信息服務(wù)器-網(wǎng)站-屬性-主目錄-應(yīng)用程序配置-配置-映射,選擇ASP - 編輯 - 修改為全部動作。

      關(guān)于更多關(guān)于REST方面的知識,建議閱讀《RESTful Web Services》這本書。

    posted on 2009-11-11 09:48 becket_zheng 閱讀(250) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 久久精品亚洲中文字幕无码网站| 亚洲国产成人精品久久| 国产一级黄片儿免费看| 久久久亚洲欧洲日产国码二区| 91网站免费观看| 猫咪免费人成在线网站 | 亚洲AV无码乱码国产麻豆穿越| 国产男女爽爽爽爽爽免费视频| 黄色一级毛片免费看| 亚洲色图黄色小说| 国产精品亚洲产品一区二区三区| 免费A级毛片在线播放| 亚洲国产精华液2020| 久久精品国产96精品亚洲| 国产精品酒店视频免费看| 老司机69精品成免费视频| 亚洲av永久无码精品网址| 亚洲成a人片在线观看中文动漫| 日韩一级免费视频| 91在线老王精品免费播放| 一级A毛片免费观看久久精品| 亚洲伦理一二三四| 久久国产亚洲观看| 亚洲成av人片一区二区三区| 亚欧免费视频一区二区三区| 中文字幕成人免费高清在线 | 亚洲最大在线观看| 亚洲色偷偷偷鲁综合| 成人永久免费福利视频网站| 四虎在线成人免费网站| 青青操免费在线视频| 免费国产草莓视频在线观看黄| 亚洲制服丝袜一区二区三区| 国产v亚洲v天堂无码网站| 亚洲国产婷婷香蕉久久久久久| 免费看片免费播放| 成年女性特黄午夜视频免费看| 久久大香伊焦在人线免费| 你是我的城池营垒免费看| 午夜成人无码福利免费视频| 亚洲乱妇熟女爽到高潮的片|