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

為啥REST如此重要?

  英文原文:Why REST is so important

  本文我們將討論 REST,它定義了一組體系架構(gòu)原則,您可以根據(jù)這些原則設(shè)計以系統(tǒng)資源為中心的 Web 服務(wù),這是一個非常容易讓人誤解的概念。本文主要是寫給那些想設(shè)計 WebService API 但卻對 REST 沒有十分清晰認識的開發(fā)者們。在本文最后會附上一些資源供大家學習,這些資源講解非常詳細。

  什么是REST

  表征狀態(tài)轉(zhuǎn)移(Representional State Transfer),是 Roy Fielding( HTTP 規(guī)范的主要編寫者之一)博士在 2000 年他的博士論文中提出來的一種軟件架構(gòu)風格。它并不是一個標準,而是通過表征(Representional )來描述傳輸狀態(tài)的一種原則。其宗旨是從資源的角度來觀察整個網(wǎng)絡(luò),分布在各處的資源由 URI 確定,而客戶端的應(yīng)用通過 URI 來獲取資源的表征。獲得這些表征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應(yīng)用不斷地在轉(zhuǎn)變著其狀態(tài)。

  目前在三種主流的 Web 服務(wù)實現(xiàn)方案中,因為 REST 模式的 Web 服務(wù)與復雜的 SOAP 和 XML-RPC 相對比,更加簡潔,越來越多的 Web 服務(wù)開始采用 REST 風格設(shè)計和實現(xiàn)。例如,Amazon.com 提供接近 REST 風格的 Web 服務(wù)進行圖書查找;雅虎提供的 Web 服務(wù)也是 REST 風格的。

  讓我們來思考一下:

  Marcus 是一個農(nóng)民,他有 4 頭牛,12 只雞和 3 頭奶牛。他現(xiàn)在模擬一個 REST API,而我是客戶端。如果我想用 REST 來請求當前的農(nóng)場狀態(tài),我僅會問:“State?”Marcus 會回答:“4 頭豬、12 只雞、3 頭奶牛”。

  這是 REST 最簡單的一個例子。Marcus 使用表征來傳輸農(nóng)場狀態(tài)。表征的句子很簡單:“4 頭豬、12 只雞、3 頭奶牛”。

  再往下看,看我如何讓 Marcus 用 REST 方式添加 2 頭奶牛?

  按照常理,可以會這樣說:Marcus,請在農(nóng)場你再添加 2 頭奶牛。難道這就是 REST 方式嗎?難道就是通過這樣的表征來傳輸狀態(tài)的嗎?不是的!這是一個遠程過程調(diào)用,過程是給農(nóng)場添加 2 頭奶牛。

  Marcus 很憤怒地響應(yīng)到:“400,Bad Request”,你到底是什么意思?

  所以,讓我們重新來一次。我們怎樣做到 REST 方式呢?該怎樣重新表征呢?它應(yīng)該是 4 頭豬、12 只雞、3 頭奶牛。好,讓我們再次重新表征……

  我:“Marcus,……4 頭豬、12 只雞、5奶牛!”

  Marcus:“好的”。

  我:“Marcus,現(xiàn)在是什么狀態(tài)?”

  Marcus:“4 頭豬、12 只雞、5 頭奶牛”。

  我:“好!”

  看到了嗎?就這樣簡單。

  為什么 RPC 也不夠好?

  從邏輯角度來看,為什么會更加青睞 REST 而不是 RPC(Remote Procedure Call,遠程過程調(diào)用 ),因為它極大的降低了我們溝通的復雜度,通過把表征作為唯一的溝通的方式。無需去討論過程(添加一頭牛?增加一種動物類型?給雞的數(shù)量翻倍還是賣掉所有豬?)我們只需討論表征,并且使用這個表征來達到我們想要的目標,很簡單,不是嗎?我不希望和 Marcus 的溝通失敗,因為我們彼此的理解過程會不一樣,所以只需要知道最后的狀態(tài)就行。但這僅僅是創(chuàng)建 RPC 會產(chǎn)生許多問題之一。如果你使用 RPC,你需要設(shè)計一些程序嵌入到某種結(jié)構(gòu)中。這種結(jié)構(gòu)需要存儲參數(shù)、錯誤的代碼、返回值等。我已經(jīng)看到許多公司這樣做,他們設(shè)計自己的 RPC-結(jié)構(gòu)來實現(xiàn)客戶端與服務(wù)器端的交互,但卻產(chǎn)生許多問題。你為什么要這么做?為什么要創(chuàng)建自己的 RPC-結(jié)構(gòu)?這樣做的好處是?倘若我想要讓應(yīng)用程序使用許多 WebService,并且這些 WebService 帶有多個 RPC-格式屬性?那么我不得不去開發(fā)一些類似這樣的東西:

  如果你們真的需要 RPC,至少要選擇一個類似 SOAP 的標準。

  但 SOAP 也很糟糕

  即使 RPC 的標準真的很令人痛苦,但我不得不承認 ACID 事務(wù),一個完整的標準化服務(wù)描述性語言 SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議)在某些環(huán)境下表現(xiàn)的還不錯。盡管如此,SOAP 產(chǎn)品的性能開銷很大,它是一個巨大的性能殺手。雖然 REST 不是一個標準,但在實現(xiàn) RESTful Web 服務(wù)時可以使用其他各種標準(比如 HTTP、URL、XML、PNG 等)。

  Session 更邪惡

  你無需 Session!但有人會說:“我想要保存用戶購物車里的商品,所以我必須要 Session!”不,這樣想是錯誤的!即使沒有 Session,你也可以做你任何你想做的事情。你可以只需在 URL 里封裝購物車信息,或者為購物車創(chuàng)建另一個資源,比如“/carts/5235”。

  不需要與客戶端進行會話,通過這些操作(指在 URL 里封裝購物車信息,或者為購物車創(chuàng)建另一個資源,比如“/carts/5235”)后,客戶端向服務(wù)器發(fā)出請求后,哪怕你在服務(wù)器上執(zhí)行卸載平臺和操作系統(tǒng)、拆除服務(wù)器硬件、重新組裝服務(wù)器、重新安裝操作系統(tǒng)、平臺、應(yīng)用程序備份恢復操作,也不會影響客戶端。

  不要強迫客戶端保存狀態(tài),這樣做不僅復雜,而且還會帶來許多問題,你應(yīng)該從你的 Web 應(yīng)用程序里刪除有狀態(tài)的東西。

  不要重造超媒體

  目前,超媒體已經(jīng)相當普及,我提醒大家,不要再去重新造輪子。這里已經(jīng)有許多,足夠你使用了:

  其他資源

  這里還有一些更加深入的資源供你參考使用:

  (編譯:張紅月,責編:王果)

  來自:Why REST is so important

it知識庫為啥REST如此重要?,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 777ZYZ玖玖资源站最稳定网址 | 日韩中文亚洲欧美视频二 | 竹菊精品久久久久久久99蜜桃 | 狠狠色狠色综合曰曰 | 如懿传免费观看在线全集 | 国产女合集小岁9三部 | 久久99热这里只频精品6 | 国产在线观看www鲁啊鲁免费 | 久久三级网站 | 亚洲欧美日本国产在线观18 | 韩国精品无码少妇在线观看网站 | 欧美激情一区二区三区四区 | 日本高清片免费观看 | 国产人妻麻豆蜜桃色 | 伦理电影v男人天堂 | 美女脱了内裤张开腿让男人爽 | 三级全黄的视频在线观看 | 亚洲精品在看在线观看 | 久久综合老色鬼网站 | 国产又粗又黄又爽的大片 | 亚洲麻豆精品成人A在线观看 | brazzers巨臀系列 | 日韩欧美群交P内射捆绑 | 国产午夜永久福利视频在线观看 | 日产精品高潮呻吟AV久久 | 亚洲免费观看在线视频 | 一本久道久久综合婷婷五月 | 久久精品国产亚洲AV久五月天 | 2022一本久道久久综合狂躁 | 影视先锋男人无码在线 | 亚洲成人网导航 | 青柠在线观看视频在线高清完整 | 欧美一区二区激情视频 | 两个人的视频免费 | 扒开黑女人p大荫蒂老女人 扒开粉嫩的小缝末成年小美女 | 国产免费网站看v片在线 | 午夜影院c绿象 | 婷婷久久无码欧美人妻 | 热九九99香蕉精品品 | 男人天堂2018亚洲男人天堂 | 芭乐视频免费资源在线观看 |