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

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

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

    隨筆-46  評論-64  文章-2  trackbacks-0
    REST架構(gòu)風(fēng)格是全新的針對Web應(yīng)用的開發(fā)風(fēng)格,是當(dāng)今世界最成功的互聯(lián)網(wǎng)超媒體分布式系統(tǒng)架構(gòu),它使得人們真正理解了Http協(xié)議本來面貌。隨著 REST架構(gòu)成為主流技術(shù),一種全新的互聯(lián)網(wǎng)網(wǎng)絡(luò)應(yīng)用開發(fā)的思維方式開始流行。

    ???? REST是什么

    ???? REST是英文Representational State Transfer的縮寫,中文翻譯為“表述性狀態(tài)轉(zhuǎn)移”,他是由Roy Thomas Fielding博士在他的論文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一個術(shù)語。REST本身只是為分布式超媒體系統(tǒng)設(shè)計的一種架構(gòu)風(fēng)格,而不是標(biāo)準(zhǔn)。

    ???? 基于Web的架構(gòu),實際上就是各種規(guī)范的集合,這些規(guī)范共同組成了Web架構(gòu)。比如Http協(xié)議,比如客戶端服務(wù)器模式,這些都是規(guī)范。每當(dāng)我們在原有規(guī) 范的基礎(chǔ)上增加新的規(guī)范,就會形成新的架構(gòu)。而REST正是這樣一種架構(gòu),他結(jié)合了一系列的規(guī)范,而形成了一種新的基于Web的架構(gòu)風(fēng)格。

    ???? 傳統(tǒng)的Web應(yīng)用大都是B/S架構(gòu),它包括了如下一些規(guī)范 。

    ???? 客戶-服務(wù)器

    • 這種規(guī)范的提出,改善了用戶接口跨多個平臺的可移植性,并且通過簡化服務(wù)器組件,改善了系統(tǒng)的可伸縮性。最為關(guān)鍵的是通過分離用戶接口和數(shù)據(jù)存儲這兩個關(guān)注點,使得不同用戶終端享受相同數(shù)據(jù)成為了可能。

    ???? 無狀態(tài)性

    • 無 狀態(tài)性是在客戶-服務(wù)器約束的基礎(chǔ)上添加的又一層規(guī)范。他要求通信必須在本質(zhì)上是無狀態(tài)的,即從客戶到服務(wù)器的每個request都必須包含理解該 request所必須的所有信息。這個規(guī)范改善了系統(tǒng)的可見性(無狀態(tài)性使得客戶端和服務(wù)器端不必保存對方的詳細(xì)信息,服務(wù)器只需要處理當(dāng)前 request,而不必了解所有的request歷史),可靠性(無狀態(tài)性減少了服務(wù)器從局部錯誤中恢復(fù)的任務(wù)量),可伸縮性(無狀態(tài)性使得服務(wù)器端可以 很容易的釋放資源,因為服務(wù)器端不必在多個request中保存狀態(tài))。同時,這種規(guī)范的缺點也是顯而易見得,由于不能將狀態(tài)數(shù)據(jù)保存在服務(wù)器上的共享上 下文中,因此增加了在一系列request中發(fā)送重復(fù)數(shù)據(jù)的開銷,嚴(yán)重的降低了效率。

    ???? 緩存

    • 為 了改善無狀態(tài)性帶來的網(wǎng)絡(luò)的低效性,我們填加了緩存約束。緩存約束允許隱式或顯式地標(biāo)記一個response中的數(shù)據(jù),這樣就賦予了客戶端緩存 response數(shù)據(jù)的功能,這樣就可以為以后的request共用緩存的數(shù)據(jù),部分或全部的消除一部分交互,增加了網(wǎng)絡(luò)的效率。但是用于客戶端緩存了信 息,也就同時增加了客戶端與服務(wù)器數(shù)據(jù)不一致的可能,從而降低了可靠性。

    ???? B/S架構(gòu)的優(yōu)點是其部署非常方便,但在用戶體驗方面卻不是很理想。為了改善這種情況,我們引入了REST。

    ???? REST在原有的架構(gòu)上增加了三個新規(guī)范:統(tǒng)一接口,分層系統(tǒng)和按需代碼。

    ???? 統(tǒng)一接口

    • REST 架構(gòu)風(fēng)格的核心特征就是強調(diào)組件之間有一個統(tǒng)一的接口,這表現(xiàn)在REST世界里,網(wǎng)絡(luò)上所有的事物都被抽象為資源,而REST就是通過通用的鏈接器接口對 資源進(jìn)行操作。這樣設(shè)計的好處是保證系統(tǒng)提供的服務(wù)都是解耦的,極大的簡化了系統(tǒng),從而改善了系統(tǒng)的交互性和可重用性。并且REST針對Web的常見情況 做了優(yōu)化,使得REST接口被設(shè)計為可以高效的轉(zhuǎn)移大粒度的超媒體數(shù)據(jù),這也就導(dǎo)致了REST接口對其它的架構(gòu)并不是最優(yōu)的。

    ????? 分層系統(tǒng)

    • 分層系統(tǒng)規(guī)則的加入提高了各種層次之間的獨立性,為整個系統(tǒng)的復(fù)雜性設(shè)置了邊界,通過封裝遺留的服務(wù),使新的服務(wù)器免受遺留客戶端的影響,這也就提高了系統(tǒng)的可伸縮性。

    ???? 按需代碼

    • REST允許對客戶端功能進(jìn)行擴展。比如,通過下載并執(zhí)行applet或腳本形式的代碼,來擴展客戶端功能。但這在改善系統(tǒng)可擴展性的同時,也降低了可見性。所以它只是REST的一個可選的約束。

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

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

      1. 網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource);
      2. 每個資源對應(yīng)一個唯一的資源標(biāo)識符(resource identifier);
      3. 通過通用的連接器接口(generic connector interface)對資源進(jìn)行操作;
      4. 對資源的各種操作不會改變資源標(biāo)識符;
      5. 所有的操作都是無狀態(tài)的(stateless)。

    ???? REST中的資源所指的不是數(shù)據(jù),而是數(shù)據(jù)和表現(xiàn)形式的組合,比如“最新訪問的10位會員”和“最活躍的10為會員”在數(shù)據(jù)上可能有重疊或者完全相同,而 由于他們的表現(xiàn)形式不同,所以被歸為不同的資源,這也就是為什么REST的全名是Representational State Transfer的原因。資源標(biāo)識符就是URI(Uniform Resource Identifier),不管是圖片,Word還是視頻文件,甚至只是一種虛擬的服務(wù),也不管你是xml格式,txt文件格式還是其它文件格式,全部通過 URI對資源進(jìn)行唯一的標(biāo)識。

    ???? REST是基于Http協(xié)議的,任何對資源的操作行為都是通過Http協(xié)議來實現(xiàn)。以往的Web開發(fā)大多數(shù)用的都是Http協(xié)議中的GET和POST方 法,對其他方法很少使用,這實際上是因為對Http協(xié)議認(rèn)識片面的理解造成的。Http不僅僅是一個簡單的運載數(shù)據(jù)的協(xié)議,而是一個具有豐富內(nèi)涵的網(wǎng)絡(luò)軟 件的協(xié)議。他不僅僅能對互聯(lián)網(wǎng)資源進(jìn)行唯一定位,而且還能告訴我們?nèi)绾螌υ撡Y源進(jìn)行操作。Http把對一個資源的操作限制在4個方法以內(nèi):GET, POST,PUT和DELETE,這正是對資源CRUD操作的實現(xiàn)。由于資源和URI是一一對應(yīng)的,執(zhí)行這些操作的時候URI是沒有變化的,這和以往的 Web開發(fā)有很大的區(qū)別。正由于這一點,極大的簡化了Web開發(fā),也使得URI可以被設(shè)計成更為直觀的反映資源的結(jié)構(gòu),這種URI的設(shè)計被稱作 RESTful的URI。這位開發(fā)人員引入了一種新的思維方式:通過URL來設(shè)計系統(tǒng)結(jié)構(gòu)。當(dāng)然了,這種設(shè)計方式對一些特定情況也是不適用的,也就是說不 是所有的URI都可以RESTful的。

    ????? REST 之所以可以提高系統(tǒng)的可伸縮性,就是因為它要求所有的操作都是無狀態(tài)的。由于沒有了上下文(Context)的約束,做分布式和集群的時候就更為簡單,也 可以讓系統(tǒng)更為有效的利用緩沖池(Pool)。并且由于服務(wù)器端不需要記錄客戶端的一系列訪問,也減少了服務(wù)器端的性能。

    ?????

    ????使用REST架構(gòu)

    ???? 對于開發(fā)人員來 說,關(guān)心的是如何使用REST架構(gòu),這里我們來簡單談?wù)勥@個問題。REST不僅僅是一種嶄新的架構(gòu),它帶來的更是一種全新的Web開發(fā)過程中的思維方式: 通過URL來設(shè)計系統(tǒng)結(jié)構(gòu)。在REST中,所有的URL都對應(yīng)著資源,只要URL的設(shè)計是良好的,那么其呈現(xiàn)的系統(tǒng)結(jié)構(gòu)也就是良好的。這點和TDD (Test Driven Development)很相似,他是通過測試用例來設(shè)計系統(tǒng)的接口,每一個測試用例都表示一系列用戶的需求。開發(fā)人員不需要一開始就編寫功能,而只需要 把需要實現(xiàn)的功能通過測試用例的形式表現(xiàn)出來即可。這個和REST中通過URL設(shè)計系統(tǒng)結(jié)構(gòu)的方式類似,我們只需要根據(jù)需求設(shè)計出合理地URL,這些 URL不一定非要鏈接到指定的頁面或者完成一些行為,只要它們能夠直觀的表現(xiàn)出系統(tǒng)的用戶接口。根據(jù)這些URL,我們就可以方便的設(shè)計系統(tǒng)結(jié)構(gòu)。從 REST架構(gòu)的概念上來看,所有能夠被抽象成資源的東西都可以被指定為一個URL,而開發(fā)人員所需要做的工作就是如何能把用戶需求抽象為資源,以及如何抽 象的精確。因為對資源抽象的越為精確,對REST的應(yīng)用來說就越好。這個和傳統(tǒng)MVC開發(fā)模式中基于Action的思想差別就非常大。設(shè)計良好的URL, 不但對于開發(fā)人員來說可以更明確的認(rèn)識系統(tǒng)結(jié)構(gòu),對使用者來說也方便記憶和識別資源,因為URL足夠簡單和有意義。按照以往的設(shè)計模式,很多URL后面都 是一堆參數(shù),對于使用者來說也是很不方便的。

    ???? 既然REST這 么好用,那么是不是所有的Web應(yīng)用都能采取此種架構(gòu)呢?答案是否定的。我們知道,直到現(xiàn)在為止,MVC(Model-View-Controller) 模式依然是Web開發(fā)最普遍的模式,絕大多數(shù)的公司和開發(fā)人員都采取此種架構(gòu)來開發(fā)Web應(yīng)用,并且其思維方式也停留于此。MVC模式由數(shù)據(jù),視圖和控制 器構(gòu)成,通過事件(Event)觸發(fā)Controller來改變Model和View。加上Webwork,Struts等開源框架的加入,MVC開發(fā)模 式已經(jīng)相當(dāng)成熟,其思想根本就是基于Action來驅(qū)動。從開發(fā)人員角度上來說,貿(mào)然接受一個新的架構(gòu)會帶來風(fēng)險,其中的不確定因素太多。并且REST新 的思維方式是把所有用戶需求抽象為資源,這在實際開發(fā)中是比較難做到的,因為并不是所有的用戶需求都能被抽象為資源,這樣也就是說不是整個系統(tǒng)的結(jié)構(gòu)都能 通過REST的來表現(xiàn)。所以在開發(fā)中,我們需要根據(jù)以上2點來在REST和MVC中做出選擇。我們認(rèn)為比較好的辦法是混用REST和MVC,因為這適合絕 大多數(shù)的Web應(yīng)用開發(fā),開發(fā)人員只需要對比較容易能夠抽象為資源的用戶需求采取REST的開發(fā)模式,而對其它需求采取MVC開發(fā)即可。這里需要提到的就 是ROR(Ruby on Rails)框架,這是一個基于Ruby語言的越來越流行的Web開發(fā)框架,它極大的提高了Web開發(fā)的速度。更為重要的是,ROR(從1.2版本起)框 架是第一個引入REST做為核心思想的Web開發(fā)框架,它提供了對REST最好的支持,也是當(dāng)今最成功的應(yīng)用REST的Web開發(fā)框架。實際上,ROR的 REST實現(xiàn)就是REST和MVC混用,開發(fā)人員采用ROR框架,可以更快更好的構(gòu)建Web應(yīng)用。

    ??? 對開發(fā)人員來說,REST不僅僅在Web開發(fā)上貢獻(xiàn)了自己的力量,同時也讓我們學(xué)到了如何把軟件工程原則系統(tǒng)地應(yīng)用于對一個真實軟件的設(shè)計和評估上。

    posted on 2008-07-10 09:55 jht 閱讀(189) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲欧美日韩国产精品一区| 亚洲精品综合久久中文字幕 | 精品成人免费自拍视频| 亚洲免费一区二区| 一区二区三区免费在线视频 | 亚洲一区二区三区高清视频| 成人免费激情视频| 香蕉大伊亚洲人在线观看| 国产成人精品久久免费动漫| 亚洲一区免费视频| 真实乱视频国产免费观看| 国产成人不卡亚洲精品91| 亚洲精品动漫人成3d在线| 一级毛片免费视频网站| 亚洲色欲久久久综合网| 久久国产精品成人免费| 亚洲男女性高爱潮网站| 手机在线免费视频| 鲁啊鲁在线视频免费播放| 亚洲午夜国产精品无码 | 最新亚洲人成无码网www电影| 亚洲国产精品成人久久蜜臀| 最新久久免费视频| 亚洲美女色在线欧洲美女| 曰批全过程免费视频在线观看| 亚洲AV无码专区国产乱码不卡| 亚洲av午夜成人片精品电影| a级黄色毛片免费播放视频| 亚洲综合无码一区二区三区| 嫩草影院免费观看| 精品熟女少妇aⅴ免费久久| 亚洲色偷偷偷网站色偷一区| 巨胸喷奶水视频www网免费| 一区二区视频免费观看| 水蜜桃亚洲一二三四在线| 曰皮全部过程视频免费国产30分钟| 一级做α爱过程免费视频| 亚洲黄色免费在线观看| 免费在线观看a级毛片| 99免费观看视频| 香蕉视频免费在线播放|