rest和rest ful_为什么REST如此重要
rest和rest ful
這篇文章致力于REST,一種塑造Web服務的架構風格,以及IT歷史上最容易被誤解的概念。 這篇文章針對的是正在設計Web服務api的人,他們沒有完全了解REST的實際含義。 我想給你個主意。 這篇文章也發給了那些想知道REST意味著什么的人,而實際上您還沒有任何線索。 是的,我過去遇到過這樣的人-很多人。 它沒有涉及Richardson成熟度模型的細節,也不會使您成為REST專家。 網路上有許多相關的指南:幻燈片,youtube視頻,博客文章,書籍等等。 而不是進入細節,我將在本文結尾處鏈接一些良好的資源。
因此,讓我們開始
REST的含義
代表性國家轉移。 這句話不僅是REST所代表的意思,還是對REST實際含義的最細微的描述。 沒聽懂嗎? 再次閱讀:代表性狀態轉移。 它不是一個標準,而是一種通過其表示來描述轉移某種狀態的行為的方式。
讓我們考慮一下:
馬庫斯是一位農民。 他的牧場有4頭豬,12頭雞和3頭牛。 我現在是客戶端時,他現在正在模擬REST api。 如果我想使用REST請求他的農場的當前狀態,我只是問他:“狀態?”
馬庫斯回答:“ 4頭豬,12只雞,3頭牛”。 這是代表性狀態轉移的最簡單示例。 馬庫斯(Marcus)通過代理將農場的狀況移交給了我。 農場的表達很簡單:“ 4頭豬,12只雞,3頭牛”。
因此,讓我們進入一個新的水平。 我如何告訴馬庫斯以REST方式向他的農場增加2頭奶牛?
也許告訴他:“馬庫斯,請在您的農場增加2頭母牛。”
您認為這是REST嗎? 我們在這里通過狀態表示來轉移狀態嗎? 沒有! 這被稱為遠程過程。 向場中添加2頭母牛的過程。 馬庫斯遺憾地回答:“ 400,錯誤請求。 你什么意思?” 因此,讓我們再試一次。 我們將如何以REST方式做到這一點? 代表又是什么? 那是“ 4頭豬,12只雞,3頭牛”。 好。 因此,讓我們再次嘗試轉移表示形式... 我:“馬庫斯,……四頭豬,十二只雞, 請給5頭牛!”。 馬庫斯:“好!”。 我:“馬庫斯,……您現在的狀態是什么?”。 馬庫斯:“四頭豬,十二只雞,五頭牛”。 我:“啊,太好了!” 看到? 其實并不難,它是REST。
為什么RPC是A **的痛處
那么,從邏輯的角度來看,為什么您會偏愛REST而不是遠程過程調用(= RPC)? 因為它使代表成為我們的唯一合同,大大降低了我們溝通的復雜性。 我們不必討論我們需要什么樣的程序(添加一頭牛?,添加某種類型的動物?將雞的數量加倍?移除所有的豬?)。 我們需要討論的只是表示形式,并使用該表示形式來實現我們想要的任何東西。 很簡單,不是嗎? 不必要的RPC復雜性根本沒有幫助。 這反而增加了誤解的風險,這是我們不希望的。 我們不希望我們的溝通失敗,因為我和馬庫斯對程序的理解不同。
但這只是RPC正在創建的許多問題之一。 如果要使用RPC,則需要設計某種結構以將過程嵌入其中。 此結構需要一個用于存儲參數,錯誤代碼,返回值等的位置。 我見過很多真正做到這一點的開發商和公司。 他們設計了自己的RPC結構,在實現客戶端和客戶端-服務器交互時出現了巨大的問題。 你為什么要這樣做? 為什么要發明自己的RPC結構? 您認為這有幫助嗎? 如果我想制作一個使用多種專有RPC格式的許多Web服務的應用程序怎么辦? 我將不得不開發這樣的東西:
啊…
如果您確實需要RPC,請至少選擇SOAP之類的標準。 不要編自己的東西!
但是SOAP仍然很糟糕
但是,即使RPC的標準也確實很痛苦。 好吧,我必須承認,使用ACID Transactions和完整的標準化服務描述語言,在某些情況下SOAP并不是很糟糕。 但是,SOAP產生的開銷巨大且是巨大的性能殺手。 HTTP是輕量級協議。 它的標題包括您需要的任何內容。 您想要放入體內的唯一東西是一種表示形式,或者甚至沒有。
會話是邪惡的
您不需要會話! 有人可能會說:“但是我想保存顧客的購物車,所以我需要那次會議!” –不,很不對! 您無需會話即可做任何您想做的事情。 您可以將購物車的信息封裝在URI中,甚至可以為該購物車創建另一個資源,例如“ / carts / 5235”。
在兩個請求之間,您希望能夠關閉服務器,卸載其平臺和操作系統,拆卸服務器硬件,重新組裝服務器,重新安裝其操作系統,平臺和應用程序以及還原備份,而客戶端甚至不會注意到。
不要強迫瀏覽器(例如智能手機)以外的客戶端存儲cookie。 這是不必要的復雜性,我向您保證,這會引起問題。 您甚至應該考慮從Web應用程序中刪除有狀態。
不要重塑超媒體
既然超媒體現在變得非常流行,我求你:不要發明自己的風格。
我們已經有很多。 有
- 通過Atom Link規范的超媒體,例如spring-hateoas和spring-data-rest中的 。
- JSON-HAL
- JSON-LD
- …
我們正在慢慢地再次達到這一點:
更多資源
在本文中,我僅涉及REST的優點。
這里有一些很好的資源,可以使您加深了解。
- 關于理查森成熟度模型的福勒斯文章
- 超媒體的絕佳幻燈片
- David Zuelke關于RESTful Web服務的演講
- REST簡介(GoogleDevelopers的短片)
- 萊茲·哈茲伍德(Stormpath)的談話
- RESTful WebService的食譜
- 關于REST的偉大的德國書
翻譯自: https://www.javacodegeeks.com/2013/08/why-rest-is-so-important.html
rest和rest ful
總結
以上是生活随笔為你收集整理的rest和rest ful_为什么REST如此重要的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Docker容器中的Tomcat上运行
- 下一篇: 农业备案立项流程(农业备案立项)