REST是一種架構(gòu)風(fēng)格,其核心是面向資源,REST專門針對(duì)網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)和開發(fā)方式,以降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。 REST提出設(shè)計(jì)概念和準(zhǔn)則為:
1.網(wǎng)絡(luò)上的所有事物都可以被抽象為資源(resource)
2.每一個(gè)資源都有唯一的資源標(biāo)識(shí)(resource identifier),對(duì)資源的操作不會(huì)改變這些標(biāo)識(shí)
3.所有的操作都是無(wú)狀態(tài)的
REST簡(jiǎn)化開發(fā),其架構(gòu)遵循CRUD原則,該原則告訴我們對(duì)于資源(包括網(wǎng)絡(luò)資源)只需要四種行為: 創(chuàng)建,獲取,更新和刪除就可以完成相關(guān)的操作和處理。您可以通過(guò)統(tǒng)一資源標(biāo)識(shí)符(Universal Resource Identifier,URI)來(lái)識(shí)別和定位資源,并且針對(duì)這些資源而執(zhí)行的操作是通過(guò) HTTP 規(guī)范定義的。 其核心操作只有GET,PUT,POST,DELETE。
由于REST強(qiáng)制所有的操作都必須是stateless無(wú)狀態(tài)的,這就沒(méi)有上下文的約束,如果做分布式,集群都不需要考慮上下文和會(huì)話保持的問(wèn)題。極大的提高系統(tǒng)的可伸縮性。
對(duì)于SOAP Webservice和Restful Webservice的選擇問(wèn)題, 首先需要理解就是SOAP偏向于面向活動(dòng),有嚴(yán)格的規(guī)范和標(biāo)準(zhǔn),包括安全,事務(wù)等各個(gè)方面的內(nèi)容, 同時(shí)SOAP強(qiáng)調(diào)操作 方法和操作對(duì)象的分離,有WSDL文件規(guī)范和XSD文件分別對(duì)其定義。 而REST強(qiáng)調(diào)面向資源,只要我們要操作的對(duì)象可以抽象為資源即可以使用REST架 構(gòu)風(fēng)格。
如果從這個(gè)意義上講,是否使用REST就需要考慮資源本身的抽象和識(shí)別是否困難, 如果本身就是簡(jiǎn)單的類似增刪改查的業(yè)務(wù)操作,那么抽象資源就比較容易, 而 對(duì)于復(fù)雜的業(yè)務(wù)活動(dòng)抽象資源并不是一個(gè)簡(jiǎn)單的事情。比如校驗(yàn)用戶等級(jí),轉(zhuǎn)賬,事務(wù)處理等,這些往往并不容易簡(jiǎn)單的抽象為資源。
其次如果有嚴(yán)格的規(guī)范和標(biāo)準(zhǔn)定義要求,而且前期規(guī)范標(biāo)準(zhǔn)需要指導(dǎo)多個(gè)業(yè)務(wù)系統(tǒng)集成和開發(fā)的時(shí)候,SOAP風(fēng)格由于有清晰的規(guī)范標(biāo)準(zhǔn)定義是明顯有優(yōu)勢(shì)的。我們可以在開始和實(shí)現(xiàn)之前就嚴(yán)格定義相關(guān)的接口方法和接口傳輸數(shù)據(jù)。
簡(jiǎn)單數(shù)據(jù)操作,無(wú)事務(wù)處理,開發(fā)和調(diào)用簡(jiǎn)單這些是使用REST架構(gòu)風(fēng)格的優(yōu)勢(shì)。而對(duì)于較為復(fù)雜的面向活動(dòng)的服務(wù),如果我們還是使用REST,很多時(shí)候都是仍然是傳統(tǒng)的面向活動(dòng)的思想通過(guò)轉(zhuǎn)換工具再轉(zhuǎn)換得到REST服務(wù),這種使用方式是沒(méi)有意義的。
正如另外一篇文章里面談到的,REST核心是url和面向資源,url代替了原來(lái)復(fù)雜的操作方法。 REST允許我們通過(guò)url設(shè)計(jì)系統(tǒng),就像測(cè)試驅(qū)動(dòng)開發(fā) 使用測(cè)試用例設(shè)計(jì)類接口一樣。 所有可以被抽象為資源的東西都可以使用RESTful的url,當(dāng)我們以傳統(tǒng)的用SOAP方式實(shí)現(xiàn)的一個(gè)查詢訂單服務(wù)的時(shí)候 可以看到, 這個(gè)服務(wù)首先存在輸入的查詢條件,然后才是輸出結(jié)果集。 那么對(duì)于類似場(chǎng)景要使用REST,不可避免的會(huì)將傳統(tǒng)的SOAP服務(wù)拆分為一個(gè)HTTP POST操作和一個(gè)HTTP GET操作。前面是輸入,而后面是輸出。
使用REST的關(guān)鍵是如何抽象資源,抽象的越精確,對(duì)REST的應(yīng)用越好。如何進(jìn)行抽象,面向資源的設(shè)計(jì)和傳統(tǒng)的面向結(jié)構(gòu)和對(duì)象設(shè)計(jì)區(qū)別,資源和對(duì)象,數(shù)據(jù)庫(kù)表之間的差別是另外一個(gè)在分析設(shè)計(jì)時(shí)候要考慮的問(wèn)題。在REST分析設(shè)計(jì)中如何改變傳統(tǒng)的SOAP分析設(shè)計(jì)思想又是一個(gè)重要問(wèn)題。
在SOA的基礎(chǔ)技術(shù)實(shí)現(xiàn)方式中WebService占據(jù)了很重要的地位,通常我們提到WebService第一想法就是SOAP消息在各種傳輸協(xié)議上交 互。近幾年REST的思想伴隨著SOA逐漸被大家接受,同時(shí)各大網(wǎng)站不斷開放API提供給開發(fā)者,也激起了REST風(fēng)格WebService的熱潮。
SOAP
什么是SOAP,我想不用多說(shuō),google一把滿眼都是。 其實(shí)SOAP最早是針對(duì)RPC的一種解決方案,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,很輕量,同時(shí)作為應(yīng)用協(xié)議可 以基于多種傳輸協(xié)議來(lái)傳遞消息(Http,SMTP等)。 但是隨著SOAP作為WebService的廣泛應(yīng)用,不斷地增加附加的內(nèi)容,使得現(xiàn)在開發(fā)人員 覺(jué)得SOAP很重,使用門檻很高。 在SOAP后續(xù)的發(fā)展過(guò)程中,WS-*一系列協(xié)議的制定,增加了SOAP的成熟度,也給SOAP增加了負(fù)擔(dān)。
|