天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

深入淺出REST

  英文原文:A Brief Introduction to REST

  作者:Stefan Tilkov ,譯者:苑永凱,發布于 2007-12-25

  不知你是否意識到,圍繞著什么才是實現異構的應用應用通信的“正確”方式,一場爭論正進行的如火如荼:雖然當前主流的方式明顯地集中在基于SOAP、WSDL和WS-*規范的Web Services領域,但也有少數人用細小但洪亮的聲音主張說更好的方式是REST,表述性狀態轉移(REpresentational State Transfer)的簡稱。在本文中,我不會涉及爭論的話題,而是嘗試對REST和RESTful HTTP應用集成做實用性的介紹。以我的經驗,有些話題一旦觸及就會引來眾多的討論,當涉及到這方面話題的時候,我會深入詳細地闡述。

  REST關鍵原則

  大部分對REST的介紹是以其正式的定義和背景作為開場的。但這兒且先按下不表,我先提出一個簡單扼要的定義:REST定義了應該如何正確地使用(這和大多數人的實際使用方式有很大不同)Web標準,例如HTTP和URI。如果你在設計應用程序時能堅持REST原則,那就預示著你將會得到一個使用了優質Web架構(這將讓你受益)的系統。總之,五條關鍵原則列舉如下:

  • 為所有“事物”定義ID
  • 將所有事物鏈接在一起
  • 使用標準方法
  • 資源多重表述
  • 無狀態通信

  下面讓我們進一步審視這些原則。

  為所有“事物”定義ID

  在這里我使用了“事物”來代替更正式準確的術語“資源”,因為一條如此簡單的原則,不應該被淹沒在術語當中。思考一下人們構建的系統,通常會找到一系列值得被標識的關鍵抽象。每個事物都應該是可標識的,都應該擁有一個明顯的ID——在Web中,代表ID的統一概念是:URI。URI構成了一個全局命名空間,使用URI標識你的關鍵資源意味著它們獲得了一個唯一、全局的ID。

  對事物使用一致的命名規則(naming scheme)最主要的好處就是你不需要提出自己的規則——而是依靠某個已被定義,在全球范圍中幾乎完美運行,并且能被絕大多數人所理解的規則。想一下你構建的上一個應用(假設它不是采用RESTful方式構建的)中的任意一個高級對象(high-level object),那就很有可能看到許多從使用唯一標識中受益的用例。比如,如果你的應用中包含一個對顧客的抽象,那么我可以相當肯定,用戶會希望將一個指向某個顧客的鏈接,能通過電子郵件發送到同事那里,或者加入到瀏覽器的書簽中,甚至寫到紙上。更透徹地講:如果在一個類似于Amazon.com的在線商城中,沒有用唯一的ID(一個URI)標識它的每一件商品,可想而知這將是多么可怕的業務決策。

  當面對這個原則時,許多人驚訝于這是否意味著需要直接向外界暴露數據庫記錄(或者數據庫記錄ID)——自從多年以來面向對象的實踐告誡我們,要將持久化的信息作為實現細節隱藏起來之后,哪怕是剛有點想法都常會使人驚恐。但是這條原則與隱藏實現細節兩者之間并沒有任何沖突:通常,值得被URI標識的事物——資源——要比數據庫記錄抽象的多。例如,一個定單資源可以由定單項、地址以及許多其它方面(可能不希望作為單獨標識的資源暴露出來)組成。標識所有值得標識的事物,領會這個觀念可以進一步引導你創造出在傳統的應用程序設計中不常見的資源:一個流程或者流程步驟、一次銷售、一次談判、一份報價請求——這都是應該被標識的事物的示例。同樣,這也會導致創建比非RESTful設計更多的持久化實體。

  下面是一些你可能想到的URI的例子:

http://example.com/customers/1234

http://example.com/orders/2007/10/776654

http://example.com/products/4554

http://example.com/processes/salary-increase-234

  正如我選擇了創建便于閱讀的URI——這是個有用的觀點,盡管不是RESTful設計所必須的——應該能十分容易地推測出URI的含義:它們明顯地標識著單一“數據項”。但是再往下看:

http://example.com/orders/2007/11

http://example.com/products?color=green

  首先,這兩個URI看起來與之前的稍有不同——畢竟,它們不是對一件事物的標識,而是對一類事物集合的標識(假定第一個URI標識了所有在2007年11月份提交的定單,第二個則是綠顏色產品的集合)。但是這些集合自身也是事物(資源),也應該被標識。

  注意,使用唯一、全局統一的命名規則的好處,既適用于瀏覽器中的Web應用,也適用于機對機(machine-to-machine,m2m)通信。

  來對第一個原則做下總結:使用URI標識所有值得標識的事物,特別是應用中提供的所有“高級”資源,無論這些資源代表單一數據項、數據項集合、虛擬亦或實際的對象還是計算結果等。

  將所有事物鏈接在一起

  接下來要討論的原則有一個有點令人害怕的正式描述:“超媒體被當作應用狀態引擎(Hypermedia as the engine of application state)”,有時簡寫為HATEOAS。(嚴格地說,這不是我說的。)這個描述的核心是超媒體概念,換句話說:是鏈接的思想。鏈接是我們在HTML中常見的概念,但是它的用處絕不局限于此(用于人們網絡瀏覽)。考慮一下下面這個虛構的XML片段:

<order self="http://example.com/customers/1234">  <amount>23</amount>  <product ref="http://example.com/products/4554">    <customer ref="http://example.com/customers/1234"></customer>  </product></order>

it知識庫深入淺出REST,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 婷婷亚洲AV色香蕉蜜桃 | 99热.com | 一区精品在线 | 黃色带三级a级 | 黑丝女仆恋上我 | 国产色欲一区二区精品久久呦 | 午夜DY888国产精品影院 | 年轻的的小婊孑2中文字幕 你是淫荡的我的女王 | 奇米狠狠一区二区三区 | 欧美午夜精品一区二区蜜桃 | 国自产精品手机在线视频 | 久久久久国产精品美女毛片 | 男人的天堂久久精品激情a 男人的天堂黄色片 | 99久久精品国产免费 | 快播电影官方网站 | www.av日韩| 亚洲视频在线观看不卡 | 欧美 另类 美腿 亚洲 无码 | 国产人人为我我为人人澡 | 蜜桃麻豆WWW久久囤产精品免费 | 亚洲男人97色综合久久久 | 91亚洲精品福利在线播放 | 欧美午夜福利主线路 | 夜夜草导航 | 国产精品手机在线视频 | 少妇精品久久久一区二区三区 | 被公疯狂玩弄的漂亮人妻 | 兰桂坊人成社区亚洲精品 | 99午夜高清在线视频在观看 | 久久久久久久久久毛片精品美女 | 99久久就热视频精品草 | 伊人影院亚洲 | 暖暖 免费 高清 日本在线 | 国产在线精彩视频 | 亚洲AV久久久噜噜噜噜 | 美女被强奷到抽搐的动态图 | 久久re6热在线视频精品66 | 办公室里做好紧好爽H | 成人永久免费视频网站在线观看 | 操中国老太太 | 超级碰碰青草久热国产 |