天天躁日日躁狠狠躁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,轉載需保留來源!

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

主站蜘蛛池模板: 午夜dj影院视频观看 | 亚洲AV精品无码喷水直播间 | 最新国产三级在线不卡视频 | 国产在线观看的 | 火影忍者高清无码黄漫 | 国产精品久久国产三级国不卡顿 | 国产福利高清在线视频 | 欧美国产日韩久久久 | 99精品久久 | 亚洲精品综合在线影院 | 99在线视频免费观看视频 | 国产精品无需播放器 | 善良的小峓子2在钱免费中文字 | 久久久久久人精品免费费看 | 午理论理影片被窝 | 国产精品亚洲精品影院 | 国产看黄网站又黄又爽又色 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片潮喷动漫 | 亚洲精品第五页中文字幕 | 久久国产av偷拍在线 | 伦理片秋霞免费影院 | 久久久久国产 | 午夜AV内射一区二区三区红桃视 | 热巴两次用约老师屁股发底线球 | 超碰97视频在线观看 | 国产精品久久久久影院色老大 | 高h gl肉文 | 无人区乱码区1卡2卡三卡在线 | 女教师跟黑人男朋友激情过后 | 欧美亚洲国内日韩自拍视频 | 国模孕妇模特季玥之粉红 | 精品国产乱码久久久人妻 | 一级毛片在线免费视频 | 快播理论片 | 久久国产精品麻豆AV影视 | 亚洲AV无码乱码国产麻豆穿越 | 99re8热视频这在线视频 | 国产 亚洲 日韩 欧美 在线观看 | 日韩吃奶摸下AA片免费观看 | 色一伦一情一区二区三区 | AV国产乱码一区二区三视频 |