• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            理解RESTful架構

            轉載自:http://www.ruanyifeng.com/blog/2011/09/restful.html

            作者: 阮一峰

            日期: 2011年9月12日

            越來越多的人開始意識到,網(wǎng)站即軟件,而且是一種新型的軟件。

            這種"互聯(lián)網(wǎng)軟件"采用客戶端/服務器模式,建立在分布式體系上,通過互聯(lián)網(wǎng)通信,具有高延時(high latency)、高并發(fā)等特點。

            網(wǎng)站開發(fā),完全可以采用軟件開發(fā)的模式。但是傳統(tǒng)上,軟件和網(wǎng)絡是兩個不同的領域,很少有交集;軟件開發(fā)主要針對單機環(huán)境,網(wǎng)絡則主要研究系統(tǒng)之間的通信。互聯(lián)網(wǎng)的興起,使得這兩個領域開始融合,現(xiàn)在我們必須考慮,如何開發(fā)在互聯(lián)網(wǎng)環(huán)境中使用的軟件。

            RESTful架構,就是目前最流行的一種互聯(lián)網(wǎng)軟件架構。它結構清晰、符合標準、易于理解、擴展方便,所以正得到越來越多網(wǎng)站的采用。

            但是,到底什么是RESTful架構,并不是一個容易說清楚的問題。下面,我就談談我理解的RESTful架構。

            一、起源

            REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。

            Fielding是一個非常重要的人,他是HTTP協(xié)議(1.0版和1.1版)的主要設計者、Apache服務器軟件的作者之一、Apache基金會的第一任主席。所以,他的這篇論文一經發(fā)表,就引起了關注,并且立即對互聯(lián)網(wǎng)開發(fā)產生了深遠的影響。

            他這樣介紹論文的寫作目的:

            "本文研究計算機科學兩大前沿----軟件和網(wǎng)絡----的交叉點。長期以來,軟件研究主要關注軟件設計的分類、設計方法的演化,很少客觀地評估不同的設計選擇對系統(tǒng)行為的影響。而相反地,網(wǎng)絡研究主要關注系統(tǒng)之間通信行為的細節(jié)、如何改進特定通信機制的表現(xiàn),常常忽視了一個事實,那就是改變應用程序的互動風格比改變互動協(xié)議,對整體表現(xiàn)有更大的影響。我這篇文章的寫作目的,就是想在符合架構原理的前提下,理解和評估以網(wǎng)絡為基礎的應用軟件的架構設計,得到一個功能強、性能好、適宜通信的架構。"

            (This dissertation explores a junction on the frontiers of two research disciplines in computer science: software and networking. Software research has long been concerned with the categorization of software designs and the development of design methodologies, but has rarely been able to objectively evaluate the impact of various design choices on system behavior. Networking research, in contrast, is focused on the details of generic communication behavior between systems and improving the performance of particular communication techniques, often ignoring the fact that changing the interaction style of an application can have more impact on performance than the communication protocols used for that interaction. My work is motivated by the desire to understand and evaluate the architectural design of network-based application software through principled use of architectural constraints, thereby obtaining the functional, performance, and social properties desired of an architecture. )

            二、名稱

            Fielding將他對互聯(lián)網(wǎng)軟件的架構原則,定名為REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現(xiàn)層狀態(tài)轉化"。

            如果一個架構符合REST原則,就稱它為RESTful架構。

            要理解RESTful架構,最好的方法就是去理解Representational State Transfer這個詞組到底是什么意思,它的每一個詞代表了什么涵義。如果你把這個名稱搞懂了,也就不難體會REST是一種什么樣的設計。

            三、資源(Resources)

            REST的名稱"表現(xiàn)層狀態(tài)轉化"中,省略了主語。"表現(xiàn)層"其實指的是"資源"(Resources)的"表現(xiàn)層"。

            所謂"資源",就是網(wǎng)絡上的一個實體,或者說是網(wǎng)絡上的一個具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在。你可以用一個URI(統(tǒng)一資源定位符)指向它,每種資源對應一個特定的URI。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符。

            所謂"上網(wǎng)",就是與互聯(lián)網(wǎng)上一系列的"資源"互動,調用它的URI。

            四、表現(xiàn)層(Representation)

            "資源"是一種信息實體,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式,叫做它的"表現(xiàn)層"(Representation)。

            比如,文本可以用txt格式表現(xiàn),也可以用HTML格式、XML格式、JSON格式表現(xiàn),甚至可以采用二進制格式;圖片可以用JPG格式表現(xiàn),也可以用PNG格式表現(xiàn)。

            URI只代表資源的實體,不代表它的形式。嚴格地說,有些網(wǎng)址最后的".html"后綴名是不必要的,因為這個后綴名表示格式,屬于"表現(xiàn)層"范疇,而URI應該只代表"資源"的位置。它的具體表現(xiàn)形式,應該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個字段才是對"表現(xiàn)層"的描述。

            五、狀態(tài)轉化(State Transfer)

            訪問一個網(wǎng)站,就代表了客戶端和服務器的一個互動過程。在這個過程中,勢必涉及到數(shù)據(jù)和狀態(tài)的變化。

            互聯(lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發(fā)生"狀態(tài)轉化"(State Transfer)。而這種轉化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉化"。

            客戶端用到的手段,只能是HTTP協(xié)議。具體來說,就是HTTP協(xié)議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。

            六、綜述

            綜合上面的解釋,我們總結一下什么是RESTful架構:

              (1)每一個URI代表一種資源;

              (2)客戶端和服務器之間,傳遞這種資源的某種表現(xiàn)層;

              (3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現(xiàn)"表現(xiàn)層狀態(tài)轉化"。

            七、誤區(qū)

            RESTful架構有一些典型的設計誤區(qū)。

            最常見的一種設計錯誤,就是URI包含動詞。因為"資源"表示一種實體,所以應該是名詞,URI不應該有動詞,動詞應該放在HTTP協(xié)議中。

            舉例來說,某個URI是/posts/show/1,其中show是動詞,這個URI就設計錯了,正確的寫法應該是/posts/1,然后用GET方法表示show。

            如果某些動作是HTTP動詞表示不了的,你就應該把動作做成一種資源。比如網(wǎng)上匯款,從賬戶1向賬戶2匯款500元,錯誤的URI是:

              POST /accounts/1/transfer/500/to/2

            正確的寫法是把動詞transfer改成名詞transaction,資源不能是動詞,但是可以是一種服務:

              POST /transaction HTTP/1.1
              Host: 127.0.0.1
              
              from=1&to=2&amount=500.00

            另一個設計誤區(qū),就是在URI中加入版本號

              http://www.example.com/app/1.0/foo

              http://www.example.com/app/1.1/foo

              http://www.example.com/app/2.0/foo

            因為不同的版本,可以理解成同一種資源的不同表現(xiàn)形式,所以應該采用同一個URI。版本號可以在HTTP請求頭信息的Accept字段中進行區(qū)分(參見Versioning REST Services):

              Accept: vnd.example-com.foo+json; version=1.0

              Accept: vnd.example-com.foo+json; version=1.1

              Accept: vnd.example-com.foo+json; version=2.0

            (完)

            posted on 2014-06-01 12:27 楊粼波 閱讀(627) 評論(0)  編輯 收藏 引用

            成人综合久久精品色婷婷| 久久精品国产亚洲av麻豆色欲| 久久精品国产亚洲AV无码偷窥| 国产女人aaa级久久久级| 国产精品久久久99| 国产69精品久久久久777| 久久香蕉国产线看观看99| 久久精品国产亚洲麻豆| 久久精品成人| 精品国产乱码久久久久软件| 久久久久亚洲av无码专区| 久久久久久精品免费免费自慰| 中文精品99久久国产| 久久久久久无码Av成人影院| 99久久国产宗和精品1上映| 91精品国产9l久久久久| 人妻无码久久一区二区三区免费| 色综合久久最新中文字幕| 99久久成人国产精品免费| 99久久无色码中文字幕| 91精品国产91久久| 一本一道久久综合狠狠老| 色狠狠久久AV五月综合| 九九久久自然熟的香蕉图片| 久久久WWW成人| 久久这里只精品99re66| 久久精品成人免费看| 99久久精品免费观看国产| 伊人久久大香线蕉综合网站| 亚洲精品美女久久777777| 日本精品久久久久影院日本| 久久国产乱子精品免费女| 久久精品亚洲乱码伦伦中文| 欧美亚洲国产精品久久| 国产91色综合久久免费| 久久中文精品无码中文字幕| 国产精品九九久久免费视频| 久久精品极品盛宴观看| 精品国产91久久久久久久| 亚洲欧洲久久久精品| 国产精品岛国久久久久|