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

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

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

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    轉(zhuǎn) http://www.infoq.com/cn/articles/rest-architecure

    作者 駱古道 發(fā)布于 2007年5月27日 下午8時18分

    社區(qū)
    Ruby,
    Java
    主題
    Web框架,
    REST,
    架構(gòu),
    Ruby on Rails
    標(biāo)簽
    AJAX,
    Ruby on Rails

    一 種思維方式影響了軟件行業(yè)的發(fā)展。REST軟件架構(gòu)是當(dāng)今世界上最成功的互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)。它讓人們真正理解我們的網(wǎng)絡(luò)協(xié)議HTTP本來面貌。它 正在成為網(wǎng)絡(luò)服務(wù)的主流技術(shù),同時也正在改變互聯(lián)網(wǎng)的網(wǎng)絡(luò)軟件開發(fā)的全新思維方式。AJAX技術(shù)和Rails框架把REST軟件架構(gòu)思想真正地在實際中很 好表現(xiàn)出來。今天微軟也已經(jīng)應(yīng)用REST并且提出把我們現(xiàn)有的網(wǎng)絡(luò)變成為一個語義網(wǎng),這種網(wǎng)絡(luò)將會使得搜索更加智能化。

    REST與HTTP協(xié)議

    REST軟件架構(gòu)是由Roy Thomas Fielding博士在2000年首次提出的。他為我們描繪了開發(fā)基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)軟件的藍(lán)圖。REST軟件架構(gòu)是一個抽象的概念,是一種為了實現(xiàn)這一互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)的行動指南。利用任何的技術(shù)都可以實現(xiàn)這種理念。而實現(xiàn)這一軟件架構(gòu)最著名的就是HTTP協(xié)議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基于HTTP的REST軟件架構(gòu),或者更進(jìn)一步把REST和HTTP看作為等同的概念。

    今天,HTTP是互聯(lián)網(wǎng)上應(yīng)用最廣泛的計算機協(xié)議。HTTP不是一個簡單的運載數(shù)據(jù)的協(xié)議,而是一個具有豐富內(nèi)涵的網(wǎng)絡(luò)軟件的 協(xié)議。它不僅僅能夠?qū)τ诨ヂ?lián)網(wǎng)資源進(jìn)行唯一定位,而且還能告訴我們對于該資源進(jìn)行怎樣運作。這也是REST軟件架構(gòu)當(dāng)中最重要的兩個理念。而REST軟件 架構(gòu)理念是真正理解HTTP協(xié)議而形成的。有了REST軟件架構(gòu)理念出現(xiàn),才使得軟件業(yè)避免了對HTTP協(xié)議的片面理解。只有正確的理論指導(dǎo),才能避免在 軟件開發(fā)的實際工作過程中少走彎路。

    REST與URI(資源定位)

    REST軟件架構(gòu)之所以是一個超媒體系統(tǒng),是因為它可以把網(wǎng)絡(luò)上所有資源進(jìn)行唯一的定位,不管你的文件是圖片、文件Word還是視頻文件,也不管你 的文件是txt文件格式、xml文件格式還是其它文本文件格式。它利用支持HTTP的TCP/IP協(xié)議來確定互聯(lián)網(wǎng)上的資源。

    REST與CRUD原則

    REST軟件架構(gòu)遵循了CRUD原則,該原則告訴我們對于資源(包括網(wǎng)絡(luò)資源)只需要四種行為:創(chuàng)建(Create)、獲取(Read)、更新 (Update)和銷毀(DELETE)就可以完成對其操作和處理了。其實世界萬物都是遵循這一規(guī)律:生、變、見、滅。所以計算機世界也不例外。這個原則 是源自于我們對于數(shù)據(jù)庫表的數(shù)據(jù)操作:insert(生)、select(見)、update(變)和delete(滅),所以有時候CRUD也寫作為 RUDI,其中的I就是insert。這四個操作是一種原子操作,即一種無法再分的操作,通過它們可以構(gòu)造復(fù)雜的操作過程,正如數(shù)學(xué)上四則運算是數(shù)字的最 基本的運算一樣。

    REST與網(wǎng)絡(luò)服務(wù)

    盡管在Java語言世界中網(wǎng)絡(luò)服務(wù)目前是以SOAP技術(shù)為主,但是REST將是是網(wǎng)絡(luò)服務(wù)的另一選擇,并且是真正意義上的網(wǎng)絡(luò)服務(wù)。基于REST思 想的網(wǎng)絡(luò)服務(wù)不久的將來也會成為是網(wǎng)絡(luò)服務(wù)的主流技術(shù)。REST不僅僅把HTTP作為自己的數(shù)據(jù)運輸協(xié)議,而且也作為直接進(jìn)行數(shù)據(jù)處理的工具。而當(dāng)前的網(wǎng) 絡(luò)服務(wù)技術(shù)都需要使用其它手段來完成數(shù)據(jù)處理工作,它們完全獨立于HTTP協(xié)議來進(jìn)行的,這樣增加了大量的復(fù)雜軟件架構(gòu)設(shè)計工作。REST的思想充分利用 了現(xiàn)有的HTTP技術(shù)的網(wǎng)絡(luò)能力。在德國電視臺上曾經(jīng)出現(xiàn)過一個這樣的五十萬歐元智力題:如何實現(xiàn)網(wǎng)絡(luò)服務(wù)才能充分利用現(xiàn)有的HTTP協(xié)議?該問題給出了 四個答案:去問微軟;WSDL2.0/SOAP1.2;WS-Transfer;根本沒有。這個問題告訴我們HTTP并不是一個簡單的數(shù)據(jù)傳來傳去的協(xié) 議,而是一個聰明的會表現(xiàn)自己的協(xié)議,這也許是REST = Representational State Transfer的真正含義。

    實際上目前很多大公司已經(jīng)采用了REST技術(shù)作為網(wǎng)絡(luò)服務(wù),如Google、Amazon等。在Java語言中重要的兩個以SOAP技術(shù)開始的網(wǎng)絡(luò)服務(wù)框架XFire和Axis也把REST作為自己的另一種選擇。它們的新的項目分別是Apache CXF Axis2 。Java語言也制定關(guān)于REST網(wǎng)絡(luò)服務(wù)規(guī)范:JAX-RS: Java API for RESTful Web Services (JSR 311)。相信還會出現(xiàn)更多與REST相關(guān)的激動人心的信息。

    REST與AJAX技術(shù)

    盡管AJAX技術(shù)的出現(xiàn)才不到兩年時間,但是AJAX技術(shù)遵循了REST的一些重要原則。AJAX技術(shù)充分利用了HTTP來獲取網(wǎng)絡(luò)資源并且實現(xiàn)了 HTTP沒有的對于異步數(shù)據(jù)進(jìn)行傳輸?shù)墓δ堋JAX技術(shù)還使得軟件更好地實現(xiàn)分布性功能,在一個企業(yè)內(nèi)只要一個人下載了AJAX引擎,其它企業(yè)內(nèi)部的人 員,就可以共享該資源了。AJAX技術(shù)遵守REST準(zhǔn)則的應(yīng)用程序中簡單和可伸縮的架構(gòu),凡是采用AJAX技術(shù)的頁面簡潔而又豐富,一個頁面表現(xiàn)了豐富多 彩的形態(tài)。

    AJAX技術(shù)還使用了一種不同于XML格式的JSON文件格式,這個意義在哪里呢?在REST軟件架構(gòu)下我們不能對于XML文件進(jìn)行序列化處理,這 樣程序員必須要使用自己的XML綁定框架。而以序列化的JavaScript對象為基礎(chǔ)的JSON已經(jīng)獲得了廣泛認(rèn)可,它被認(rèn)為能以遠(yuǎn)比XML更好的方式 來序列化和傳輸簡單數(shù)據(jù)結(jié)構(gòu),而且它更簡潔。這對REST是一個極大貢獻(xiàn)和補充。

    當(dāng)前的網(wǎng)絡(luò)應(yīng)用軟件還違背了REST的“無狀態(tài)服務(wù)器”約束。REST服務(wù)器只知道自己的狀態(tài)。REST不關(guān)心客戶端的狀態(tài),客戶端的狀態(tài)自己來管 理,這是AJAX技術(shù)的應(yīng)用之地。通過AJAX技術(shù),可以發(fā)揮有狀態(tài)網(wǎng)絡(luò)客戶機的優(yōu)勢。而REST的服務(wù)器關(guān)心的是從所有網(wǎng)絡(luò)客戶端發(fā)送到服務(wù)器操作的順 序。這樣使得互聯(lián)網(wǎng)這樣一個巨大的網(wǎng)絡(luò)得到有序的管理。

    REST與Rails框架

    Ruby on Rails框架(簡稱Rails或者Rails框架)是一個基于Ruby語言的越來越流行的網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。它提供了關(guān)于REST最好的支持,也是 當(dāng)今應(yīng)用REST最成功的一個軟件開發(fā)框架。Rails框架(從版本1.2.x起)成為了第一個引入REST作為核心思想的主流網(wǎng)絡(luò)軟件開發(fā)框架。在 Rails框架的充分利用了REST軟件架構(gòu)之后,人們更加堅信REST的重要性和必要性。Rails利用REST軟件架構(gòu)思想對網(wǎng)絡(luò)服務(wù)也提供了一流的 支持。從最直觀的角度看待REST,它是網(wǎng)絡(luò)服務(wù)最理想的手段,但是Rails框架把REST帶到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。這是一次飛躍,讓REST的思 想從網(wǎng)絡(luò)服務(wù)的應(yīng)用提升到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)。利用REST思想的simply_restful插件已經(jīng)成為了Rails框架的核心內(nèi)容。

    REST安全性

    我們把現(xiàn)有基于SOAP的網(wǎng)絡(luò)服務(wù)和基于REST/HTTP網(wǎng)絡(luò)服務(wù)作個比喻,前者是一種傳統(tǒng)的寄信方式,而后者是現(xiàn)代網(wǎng)絡(luò)的電子郵件方式。要是是 寄信和電子郵件都有病毒存在的話,傳統(tǒng)的寄信被送到對方就很危險,而電子郵件是開發(fā)的,電子郵件供應(yīng)商比如Google為我們檢查了電子郵件是否有病毒。 這里并不是說明SOAP網(wǎng)絡(luò)服務(wù)消息包含義病毒,而是說明HTTP是無法處理SOAP信息包究竟好不好,需要額外的軟件工具解決這一問題,包括防火墻也用 不上和管不了。

    REST/HTTP網(wǎng)絡(luò)服務(wù)的信息包可以被防火墻理解和控制。你可以按照操作和鏈接進(jìn)行過濾信息包,如你可以規(guī)定從外部來的只能讀取(GET操作) 自己服務(wù)器的資源。這樣對于系統(tǒng)管理員而言使得軟件管理更為簡單。REST的安全性還可以利用傳輸安全協(xié)議SSL/TLS、基本和摘要式認(rèn)證(Basic und Digest Authentication)。除了這些REST自身的安全性功能外,還可以利用像基于信息的Web Services Security(JSR 155)作為REST不錯的補充。

    參考文獻(xiàn)

    中文參考文獻(xiàn) Roy Thomas Fielding博士論文中文版本 Roy Thomas Fielding博士論文英文版本
    作者簡介:駱古道,網(wǎng)名Cnruby,八十年代初畢業(yè)于西北工業(yè)大學(xué)數(shù)理力學(xué)系,1988年公派留學(xué)德國,從事組合最優(yōu)化理論研究,從九十年代初期起一直致力于計算機領(lǐng)域軟件開發(fā)、設(shè)計和管理等方面工作,個人博客為“道喜技術(shù)日記”。

    posted on 2009-03-22 14:20 二胡 閱讀(178) 評論(0)  編輯  收藏 所屬分類: web系統(tǒng)開發(fā)
    主站蜘蛛池模板: 精品亚洲成AV人在线观看| 亚洲男人的天堂在线| 免费黄色一级毛片| 国产亚洲成在线播放va| 亚洲AV第一页国产精品| 一个人免费观看www视频在线| 亚洲AV噜噜一区二区三区| 亚洲国产精品va在线播放| 拨牐拨牐x8免费| 9久久免费国产精品特黄| 久久精品国产亚洲AV蜜臀色欲 | 日本免费高清一本视频| 久青草视频97国内免费影视| 亚洲xxxxxx| 亚洲日本va在线视频观看| 在线中文高清资源免费观看| 久久国产精品免费一区| 亚洲乱妇熟女爽到高潮的片| 亚洲av激情无码专区在线播放| 日韩免费在线观看| 99热这里只有精品6免费| 九九免费久久这里有精品23| 亚洲男人天堂2018av| 久久亚洲国产视频| 亚洲精品一级无码中文字幕| 亚洲人成网站免费播放| 国产精成人品日日拍夜夜免费| 国产偷国产偷亚洲高清在线| 亚洲av无码片在线观看| 亚洲av午夜福利精品一区人妖| 在线观看亚洲免费| 国产成人无码免费看视频软件 | 国产三级电影免费观看| 最近免费中文字幕大全高清大全1| 一区二区三区免费视频观看| 亚洲精品永久在线观看| 亚洲免费视频网址| 亚洲一区二区影院| 亚洲av永久无码精品国产精品 | 老司机亚洲精品影院| 亚洲色爱图小说专区|