基于REST架構(gòu)的WebService設(shè)計(jì)-創(chuàng)新互聯(lián)

來(lái)自: http://www.williamlong.info/archives/1728.html基于REST架構(gòu)的WebServ
ice設(shè)計(jì)

先前我曾經(jīng)介紹過(guò)利用Apache Axis實(shí)現(xiàn)基于SOAP的Web Service實(shí)現(xiàn)技術(shù)和相關(guān)代碼,總的來(lái)說(shuō),SOAP的Web Service解決方案雖然較為成熟,且安全性較好,但是使用門檻較高,在大并發(fā)情況下會(huì)有性能問(wèn)題,在互聯(lián)網(wǎng)上使用不太普及,因此并不太適合Web 2.0網(wǎng)站服務(wù)使用,目前大量的Web 2.0網(wǎng)站使用另外一種解決方案——REST。

我們一直強(qiáng)調(diào)成都做網(wǎng)站、成都網(wǎng)站建設(shè)對(duì)于企業(yè)的重要性,如果您也覺(jué)得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過(guò)程中的有力推手。專業(yè)網(wǎng)絡(luò)公司不一定是大公司,創(chuàng)新互聯(lián)作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。

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

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

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

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

REST的設(shè)計(jì)準(zhǔn)則

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

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

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

通過(guò)通用的連接器接口(generic connector interface)對(duì)資源進(jìn)行操作;

對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí)符;

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

使用REST架構(gòu)

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

客戶端代碼:

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")
Endif

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

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

當(dāng)前名稱:基于REST架構(gòu)的WebService設(shè)計(jì)-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://muchs.cn/article6/djisog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、服務(wù)器托管、網(wǎng)站收錄網(wǎng)站導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)