Ryan Tomayko 我怎樣向老伴解釋REST

2021-05-26 09:55:22 字數 4850 閱讀 6115

原文請見(the original post is here):

wife:誰是roy fielding

?ryan:某男,很聰明。

wife:哦,他幹哈的?

ryan:他幫著寫了第乙個web伺服器,又對於web的如此執行做了大量的研究。他的名字在規定瀏覽器如何從伺服器獲取頁面的協議規範裡都有。

wife:咋弄的?

ryan:你是說web?

wife:嗯哪。

ryan:哦,啊,這真是很神奇。最奇怪的是人們常常低估這個協議,我是說http,幾乎可以做任何事情,乾淨利落,卻總是被人們忽視。

wife:你是說 http,就是我每次在瀏覽器位址列中輸入的那個?

ryan:是啊,這第一部分告訴瀏覽器用什麼協議,這個東東可以說是整個計算機歷史上最重要最具突破性的進展。

wife:why?

ryan:因為它能夠在世界上任何地方指向在世界上另乙個地方的某樣東西。他是全球資訊網的基礎,你可以把它當作知識或者資訊的gps系統。

wife:獲取網頁?

ryan:實際上可以獲取任何東西。這個roy fielding專門研究這些東西如何指向什麼東西,全球資訊網就建立在一種叫做rest

的架構之上,rest 定義了「資源」,就是所指向的那些東西。

wife:網頁也是資源?

ryan:算吧是一種。網頁是乙個資源的「表現物」。資源只不過是乙個概念,用url來代表,也就是那些你鍵入在瀏覽器位址列中的東西。

wife:我知道什麼是url…

ryan:哦,是了,它告訴瀏覽器某處有乙個概念,瀏覽器就請求索取這個概念的「表現物」,即以這個網頁來代表。

wife:那麼還會有什麼其它的表現物呢?

ryan:實際上表現物並不多,資源經常只有一種表現形式,但我們希望將來會有很多,因為總有很多新格式不斷冒出來。

wife:比如?

ryan:呵呵,有乙個概念叫「web服務」,對不同的人可能有不同的含義,但它的基本意思是機器可以像人一樣使用web。

wife:又是機械人之類的東西?

ryan:不,不太一樣。我不是說機器可以坐在桌子邊上瀏覽web,而是計算機可以使用相同的協議互相收發資訊。我們實際上早就能這樣做了,但讓我們對全世界所有的機器都這樣做,現在的技術還打不到。

wife:為什麼不行?

ryan:因為沒有這樣設計。當fielding和他的同伴開始構建web的時候,具備對話任何地方任何一台機器的能力是乙個重要的需求,但當時的計算機互聯技術還都沒有這種考慮,只需要在很小的範圍內溝通。

wife:現在需要所有機器都互相對話?

ryan:是啊,不僅如此,我們需要所有的機器都能跟所有其它的機器談論他們肚子裡的東西,我們也要有辦法讓一台機器告訴另一台機器關於第三台機器裡有某個資源。

wife:什麼?

ryan:比方說你的小姐妹要向你借吸塵器用用,但是你沒有,你大姨有,於是你告訴她向你大姨借。在生活中這很常見,同樣如果機器能夠互相通話也會經常發生。

wife:那麼機器是如何說東西在**的?

ryan:當然是url。如果機器要說的所有東西都有乙個url,也就是說你同意說「那台機器所指的即等同於乙個名詞「,你、我以及其他人都同意以某種方式談論這些個」名詞「,這很重要,是嗎?

wife:當然。

ryan:機器並沒有名詞——那是他們的悲哀。每一種程式語言、資料庫或者系統都有不同的」名詞「,這就是url如此重要的原因,它使所有這些系統能夠溝通彼此的」名詞「。

wife:但是當我瀏覽乙個頁面的時候,並不是這樣看的。

ryan:沒人這樣看,除了fielding和他的那班人,所以說機器還是很悲哀。

wife:那麼動詞、代詞、形容詞呢?

ryan:有意思你竟然問了,這正是rest的另乙個重要方面。我們先來說說動詞。

wife:我只是開個玩笑。

ryan:這是個有趣的玩笑,但其實根本不是玩笑。動詞非常重要,計算機理論中有乙個強大的概念:」多型性「,用技客的話說,不同的名詞可以使用同樣的動詞。

wife:不懂。

ryan:好吧…看那個咖啡桌,名詞是什麼?杯子、盤子、報紙、遙控器,對所有這些,你可以做什麼?

wife:沒明白(get獲得)你的意思…

ryan:你可以「獲得「(get)他們,是嗎?你可以拿起它們,敲打它們,燒掉它們,你可以對它們用同樣的動詞。

wife:ok,那又怎樣?

ryan:這很重要,如果不是我對你說」去拿(get)杯子「、」去拿報紙「、」去拿遙控器「,或者我們用其它動詞說這些東西,我不能總用」去拿「這個詞,我們必須想一些新詞進行動名詞組合。

wife:哇,不可思議。

ryan:是,我們的大腦很聰明,可以用乙個動詞對付很多不同的名詞,某些動詞比另一些更專指,只能用於少量的名詞。例如,我不能駕駛乙個杯子,也不能喝一輛汽車,但是有一些動詞就具有普適性,例如get(獲得),put(送出),delete(刪除)。

wife:你不能刪除乙個杯子!

ryan:啊啊,好吧,我們可以把它扔掉。這又是乙個玩笑,是嗎?

wife:恩。

wife:這樣看來get一定是個很重要的動詞。

ryan:正是。特別是當你使用瀏覽器的時候,瀏覽器幾乎只用」get』獲取東西,而不常與資源進行其它方式的互動。這樣就造成乙個問題:人們常以為http只會「獲得」東西。其實http實際上是把動詞賦予名詞的一般協議。

wife:酷!可是我還是沒有看出有什麼不同,你需要什麼名詞和動詞呢?

ryan:名詞已經有了,但形式不對。

試想你正在瀏覽亞馬遜**,想給我買聖誕禮物。如果每一件商品都是乙個名詞,如果用一種機器能夠懂得的方式表達,你可以做很多漂亮的事情。

wife:機器為什麼不能懂得乙個通常的網頁呢?

ryan:因為網頁是設計給人看的,機器是不管排版和風格的。機器通常只需要資料,理想情況:每個url都應該包含乙個給人看的網頁和乙個給機器讀的表達,當乙個機器「獲取」乙個資源,應該只給那個為機器準備的東東,如果乙個瀏覽器「獲取」,就給那個給人看的網頁。

wife:因而人們就應該為機器準備那些給機器讀的格式?

ryan:如果值得的話。

你看,我們談論了很多抽象的事情,何不舉個具體的例子呢?你是乙個老師–在學校裡一定有乙個不小的計算機系統,甚至可能有

三、四個計算機系統,來管理學生、安排課程、記錄成績、儲存教學資訊和參考資料等等。如果這些系統是基於web的,可能對於這裡的每乙個名詞:學生、老師、班級、教材、教室等都有乙個url。一般而言你如果用瀏覽器訪問這些url,你可以看到記載它們的網頁。而如果每個url同時有給機器獲取的內容,則會給系統帶來許多新奇的工具,因為所有的資訊都會以另一種標準方式獲得利用。每乙個系統之間也可以更方便地「對話」。或者,你就可以建立乙個在全國範圍內可以使每個學校的系統互相」對話「的系統以彙總考試成績,等等,潛力未可估量。

每個系統都可以採用簡單的http協議從其它系統中獲取資訊。如果乙個系統需要向另乙個系統增加東西,它可以用http的post命令,如果乙個系統想更新另乙個系統的資料,它可以用http的put命令。剩下的事情只有搞清楚資料應該看起來像什麼了。

wife:這就是你和你那些計算機哥們整天整的東西?決定資料看起來像什麼嗎?

ryan:很不幸,不是的。大多數人都忙著寫一些複雜的層次規範,想以不同的方式達到同樣的目的,但實際上不是那麼有用和有效。名詞並不通用,動詞也不多型。我們扔掉了幾十年的經驗總結和已被驗證的技術,卻以過去失敗的系統另起爐灶。我們用http只是因為它能幫助我們少與我們的網路和安全人員對話。我們喪失了簡單性,換來了炫目的工具和魔術。

wife:這是為什麼涅?

ryan:木有概念。

wife:你為嘛不說點啥?

ryan:中,以後再說。

怎樣向 Google 提問

google 中國的部落格網誌,走近我們的產品 技術和文化 2006年2月16日 上午 08 46 00 發表者 陸韻晟,google 工程師 小時候,很喜歡看 十萬個為什麼 我也會不斷向身邊的大人提出各種問題。但很多問題,我並不能夠得到答案。那時候我就想,如果有一天,誰能發明一部機器解答我的所有問...

這個女孩對我怎樣?

請聽我慢慢道來 大約乙個多月前認識了乙個女孩子,可能比較投緣的關係,不久之後就我們兩個就開始不斷的聊q了。基本每天都斷斷續續地聊,例如上班的時間,有空就會聊幾句,然後中間斷開下,如此迴圈。聊q最多的還是晚上,通常一聊就是2 3小時,平時也會出來見下面。近來還發展到開始打 了,剛剛過的星期六日的晚上,...

我向老師問聲好

我向老師問聲好 題記 在此一年一度的教師節來臨之際,遙祝恩師節日快樂!代騰飛 2009年9月10日 於成都 一年佳節又來到 我向老師問聲好 老師,您辛苦了!一曲校園的歌謠 把我帶回了青春年少 當年求學的情景在腦海間不停地閃耀 恩師的語重心長還在耳畔不停地縈繞 那一句句刻骨銘心的哼哼教導 還激勵著學生...