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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

    InfoQ上有一篇《深入淺出REST》的文章:http://www.infoq.com/cn/articles/rest-introduction

    文章中的主要觀點(diǎn)包括了:

     A. 為所有“事物”定義ID
     B. 將所有事物鏈接在一起
     C. 使用標(biāo)準(zhǔn)方法
     D. 資源多重表述
     E. 無狀態(tài)通信

    讀完后有下列疑問:

    A. 觀點(diǎn)1中這個(gè)“ID”如何定義?

    文章中提到了使用URI作為所有“事物(資源)” 的唯一ID,于是為了這樣一個(gè)疑問:為什么不能用URL,而用URI呢?網(wǎng)上對(duì)URI和URL的區(qū)別并沒有一個(gè)明確的說服,我個(gè)人的理解是這樣的:

    URI是資源標(biāo)識(shí)符,而URL是資源定位器。假設(shè)我們對(duì)所有的資源都進(jìn)行統(tǒng)一標(biāo)識(shí)(注意是全局唯一標(biāo)識(shí)),有一個(gè)資源的標(biāo)記是4321,那么這個(gè)4321是URI。而如何獲取到這個(gè)4321資源呢?URI并沒有說明。于是我們可以同HTTP協(xié)議,或者FTP協(xié)議來獲取,這種依賴于特定通訊協(xié)議的獲取方式就是URL了。

    但是不管是URI還是URL,只要指向同一個(gè)資源,最終都是通過唯一的這個(gè)標(biāo)識(shí)(URI)來區(qū)分資源的。

    不知道這個(gè)理解是否正確?

    B. 要為那些“事物”定義ID?

    文章中提到了我們不單為一個(gè)單一的資源定義ID,我們也可以為資源的集合定義ID。于是就有了這樣的疑問:

    對(duì)于一些集合范圍比較明確的資源,比如blog的按年月日分類,我們可以簡(jiǎn)單地使用諸如這樣的URL:http://xxx.com/archive/2010/06/24/324348.html 來表示REST風(fēng)格的資源,但是如果這個(gè)集合的范圍是模糊的,或者是靠某些條件表達(dá)式的執(zhí)行結(jié)果來限制的,比如說所有符合條件1的文章集合。那么對(duì)于這種模式的資源,REST又如何來表示呢?

    進(jìn)一步地引申到實(shí)現(xiàn)問題?假如為這么多事物引入ID,那么會(huì)不會(huì)導(dǎo)致我們的存儲(chǔ)結(jié)構(gòu)暴增?在上面這篇文章中也提到了這樣的觀點(diǎn):

    例如,一個(gè)定單資源可以由定單項(xiàng)、地址以及許多其它方面(可能不希望作為單獨(dú)標(biāo)識(shí)的資源暴露出來)組成。標(biāo)識(shí)所有值得標(biāo)識(shí)的事物,領(lǐng)會(huì)這個(gè)觀念可以進(jìn)一步引導(dǎo)你創(chuàng)造出在傳統(tǒng)的應(yīng)用程序設(shè)計(jì)中不常見的資源:一個(gè)流程或者流程步驟、一次銷售、一次談判、一份報(bào)價(jià)請(qǐng)求——這都是應(yīng)該被標(biāo)識(shí)的事物的示例。同樣,這也會(huì)導(dǎo)致創(chuàng)建比非RESTful設(shè)計(jì)更多的持久化實(shí)體。


    C. 使用鏈接指向任何可以標(biāo)識(shí)的事物

    這一點(diǎn)上,我看不出REST和傳統(tǒng)的的Web概念有什么明顯區(qū)別的地方?也許是我的理解不夠

    D. “標(biāo)準(zhǔn)方法”是否夠用?

    從文章中可以看出,REST依靠HTTP協(xié)議的動(dòng)詞(get/put/delete)來描述對(duì)資源的操作,于是在我們的應(yīng)用端有了很多抽象的標(biāo)準(zhǔn)方法:getAll, delete, getById....。問題是僅僅依靠這些標(biāo)準(zhǔn)方法夠嗎?

    傳統(tǒng)的WEB請(qǐng)求是通過在請(qǐng)求中附著參數(shù)信息,如XXX.jsp?參數(shù)1&參數(shù)2,如果我們采用了REST方式的URI描述,對(duì)于一些復(fù)雜的請(qǐng)求描述,會(huì)不會(huì)導(dǎo)致描述困難?而且對(duì)應(yīng)的服務(wù)器端方法如何定義?畢竟現(xiàn)在很多的交互網(wǎng)站都有大量的自定義查詢,僅靠幾個(gè)簡(jiǎn)單的CRUD方法定義顯然不能滿足,那么REST是如何解決的呢?

    E. 無狀態(tài)通信如何實(shí)現(xiàn)

    這是最令我困惑的一個(gè)地方。原文翻譯如下:

    無狀態(tài)通信是我要講到的最后一個(gè)原則。首先,需要著重強(qiáng)調(diào)的是,雖然REST包含無狀態(tài)性(statelessness)的觀念,但這并不是說暴露功能的應(yīng)用不能有狀態(tài)——
    事實(shí)上,在大部分情況下這會(huì)導(dǎo)致整個(gè)做法沒有任何用處。REST要求狀態(tài)要么被放入資源狀態(tài)中,要么保存在客戶端上?;蛘邠Q句話說,服務(wù)器端不能保持除了單次請(qǐng)求之外的,任何與其通信的客戶端的通信狀態(tài)。這樣做的最直接的理由就是可伸縮性—— 如果服務(wù)器需要保持客戶端狀態(tài),那么大量的客戶端交互會(huì)嚴(yán)重影響服務(wù)器的內(nèi)存可用空間(footprint)。(注意,要做到無狀態(tài)通信往往需要需要一些重新設(shè)計(jì)——不能簡(jiǎn)單地將一些session狀態(tài)綁縛在URI上,然后就宣稱這個(gè)應(yīng)用是RESTful。)

    但除此以外,其它方面可能顯得更為重要:無狀態(tài)約束使服務(wù)器的變化對(duì)客戶端是不可見的,因?yàn)樵趦纱芜B續(xù)的請(qǐng)求中,客戶端并不依賴于同一臺(tái)服務(wù)器。一個(gè)客戶端從某臺(tái)服務(wù)器上收到一份包含鏈接的文檔,當(dāng)它要做一些處理時(shí),這臺(tái)服務(wù)器宕掉了,可能是硬盤壞掉而被拿去修理,可能是軟件需要升級(jí)重啟——如果這個(gè)客戶端訪問了從這臺(tái)服務(wù)器接收的鏈接,它不會(huì)察覺到后臺(tái)的服務(wù)器已經(jīng)改變了。

    對(duì)于這個(gè)觀點(diǎn)我是十分贊成的,應(yīng)用可以有狀態(tài)但這個(gè)狀態(tài)的改變,不要依賴于特定的協(xié)議狀態(tài)(比如Session本身就是為了解決HTTP無狀態(tài)而存在的)。

    這里我感興趣的是實(shí)現(xiàn)方式?既然不提倡用協(xié)議的狀態(tài),又不能在URL附著,那么如何在URI中體現(xiàn)出來呢?如果在URI中暴露出來,會(huì)不會(huì)令到用戶的信息泄露?如果是保存到客戶端,除了寫cookie和文件好像我沒有像到太多別的方法?但是這兩種方式經(jīng)常由于安全原因被用戶禁掉

    歡迎大家指教??!

    最新更新:在JE上看到一篇REST的帖子討論,非常精彩。雖然是07年的,但是依然有很好的指導(dǎo)意義。解開了不少困惑

    http://www.javaeye.com/topic/70113


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-09-07 11:04 Paul Lin 閱讀(1796) 評(píng)論(1)  編輯  收藏 所屬分類: 其它技術(shù)


    FeedBack:
    # re: 對(duì)REST理解上的一些疑問[未登錄]
    2010-09-15 17:45 | Sam
    翻翻以前的哦feed看到你的問題,試著回答下吧。
    A. 觀點(diǎn)1中這個(gè)“ID”如何定義?
    我粗略看了下原文,文中并沒有提及一定要用URI,不能用URL這種觀點(diǎn)。URL和URI的介紹很多,怎么可能沒有一個(gè)明確的說服呢?
    而且,無論用URL或者URI來說明ID如何定義這章節(jié)都不沖突。就跟說北京有故宮博物館和中國(guó)有故宮博物館一樣的道理。

    B. 要為那些“事物”定義ID?
    你的問題是“那么對(duì)于這種模式的資源,REST又如何來表示呢?”
    我試著回答,假設(shè)你有個(gè)查詢需要查詢所有姓為“張”,并且出生日期在1950年前的。那么定義URL的時(shí)候,這種集合性的資源ID是后臺(tái)解析這個(gè)查詢邏輯的地方定義的。舉個(gè)例子,老板給你一個(gè)feature讓你做,這個(gè)feature要做很多邏輯。那么老板給你講的時(shí)候,不會(huì)把這個(gè)case的邏輯說一遍,只會(huì)告訴你case名稱,這個(gè)case名稱就是ID。不要想著把整個(gè)case的實(shí)現(xiàn)邏輯在URI中體現(xiàn),僅僅定義個(gè)ID即可。

    C. 使用鏈接指向任何可以標(biāo)識(shí)的事物
    不清楚具體哪個(gè)地方不理解,其實(shí)這個(gè)不用較真。如果你以前寫web的時(shí)候就已經(jīng)follow了些類似的REST風(fēng)格,那么相比就是沒太大的區(qū)別。
    而且就REST的風(fēng)格來講,國(guó)外的一些大牛們也吵來吵去的。所謂的風(fēng)格,不局限于一定要按照某種方式去寫才叫REST。理解概念,將其應(yīng)用到web開發(fā)中去,外面的人看懂沒看懂不一定強(qiáng)制要求,Team內(nèi)能達(dá)成一致并相互理解就算成功。

    D. “標(biāo)準(zhǔn)方法”是否夠用?
    既然叫做標(biāo)準(zhǔn)方法,就是就是解決web開發(fā)中一些標(biāo)準(zhǔn)問題,例如CRUD。
    當(dāng)然這個(gè)不是絕對(duì)的,我曾經(jīng)看到過一些REST實(shí)踐的人不用DELETE,GET來做,僅僅用POST就可以實(shí)現(xiàn)REST開發(fā),可向其概念與應(yīng)用存在著并非絕對(duì)的關(guān)系。
    你說的是否夠用我想能你從業(yè)務(wù)角度考慮問題,不是先選技術(shù),再去解決特定業(yè)務(wù)問題。而是從業(yè)務(wù)角度尋找最佳技術(shù)解決方案。
    如果業(yè)務(wù)系統(tǒng)很大,REST無法完美的解決相應(yīng)case問題,或者說能夠解決但會(huì)很復(fù)雜。那么你可以考慮基于WSDL的WebService來實(shí)現(xiàn),很多文章都在說兩個(gè)的區(qū)別和應(yīng)用場(chǎng)景,你可以參考一下。

    E. 無狀態(tài)通信如何實(shí)現(xiàn)
    這個(gè)我這樣理解,跳出基于HTML4標(biāo)準(zhǔn)的Web開發(fā)方式。想想如下場(chǎng)景:
    1. 基于CS模型的客戶端開發(fā)方式,例如用WPF,SWT,WinForm等。
    2. 基于RIA Web框架的開發(fā)訪方式,例如Silverlight, Flash, JFX等。
    3. 基于HTML5的開發(fā)模式。
    4. 基于腳本語言的開發(fā)模式,例如用Ruby或者Grovy訪問web等。

    以上拙見,就叨叨這些吧。  回復(fù)  更多評(píng)論
      
    <2010年9月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日产亚洲一区二区三区| 免费人成在线观看网站品爱网日本| 国产成人无码精品久久久久免费| 免费国产草莓视频在线观看黄| 国产精品午夜免费观看网站| 免费在线观看黄网站| 粉色视频在线观看www免费| 18禁在线无遮挡免费观看网站| 外国成人网在线观看免费视频| 日本精品人妻无码免费大全| 国产一区二区三区免费看| 亚洲2022国产成人精品无码区| 伊人久久五月丁香综合中文亚洲 | 免费无码又爽又刺激高潮| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲av无码专区青青草原| a毛片久久免费观看| 在线观看的免费网站| 亚洲av综合av一区| 亚洲a无码综合a国产av中文| 最近免费字幕中文大全视频 | 亚洲中久无码永久在线观看同| 免费a级毛片18以上观看精品| 老司机午夜在线视频免费观| 114一级毛片免费| 青青青青青青久久久免费观看| 亚洲AV无码一区二区三区久久精品| 国产精品四虎在线观看免费| 亚洲一区中文字幕在线观看| 免费人成在线观看播放a| 亚洲精品无码久久千人斩| 看免费毛片天天看| 国产精品久久久亚洲| 国产免费MV大全视频网站| 国产午夜免费福利红片| 国产免费AV片在线观看播放| 亚洲18在线天美| 国产成人精品亚洲精品| 国产亚洲视频在线| 亚洲国产精品嫩草影院在线观看 | 6080午夜一级毛片免费看|