有一種設計風格叫RESTful

一 前言

剛看了《RESTful Web APIs中文版》,試讀了前兩章。每本書的第一章都是抽象得不得了,是整本書的總結;開篇說基礎有點簡單,從教你怎麼向地址欄輸入地址訪問網頁開始(某人女友還真不會這個),第二章是個簡單例子,一度睡着。該書由三個關鍵詞“RESTful “ ”Web “ ”APIs“,貌似廢話......但是要把這三個詞加起來纔是該書的核心。說REST太泛了,說"RESTful uri" 夠精確,我相信後面章節也是圍繞怎麼設計"RESTful uri"來說的。


二 我也來說REST

REST,representational state transfer , 字面理解:表述性狀態轉移。一時間看不懂?我開始也不懂,正常人怎麼會看懂缺少主語賓語的“句子”的意思呢,補全:資源的狀態通過瀏覽器和服務器之間的交互表述性的數據來改變。好像把它翻譯了一遍,算了不管了。舉例子吧,我們服務器有一本書,它的狀態是 id = 1 ,name = "book1"  ; 好了,現在 我們HTTP get 它一下,服務器給我們返回 id = 1 ,name = "book1" 這個狀態,這時候我們瀏覽器也變成狀態1了。現在我要改它的名字爲”book2“, 於是我們來HTTP post 它一下,這post 是帶參數的(id=1,name="book2")用<form>;我們瀏覽器這時候書是狀態2,我們post 到服務器就是把狀態2 “轉移”給服務器;(服務器怎麼處理先不管)結果服務器變成了狀態2。這不就是所謂的狀態轉移咯。

如果說讓你用一句話表達你懂REST , 你會怎麼說? 我會說:restful uri 沒有動詞。 可能大家也知道獲取一本書的restful uri 是 “book/1” 而不是“getBook/1”。因爲Rest 把服務器的東西都叫做資源,一本書是一個資源,實體。那你就會問了,那動作哪去了? 在HTTP 那裏。HTTP 有get 方法,這個就是動詞。我會告訴你,HTTP還有delete 方法,沒了解過的傻眼了吧。而這本書由重點講 HTTP 8方法中 的5個,分別是 get head post put  delete   。還有,restful uri 沒有版本之說,老實說難道我的書架上的一本書《黑客與畫家》還有新和舊之分?


三 談談RESTful

符合REST的叫做RESTful。RESTful 是一種設計風格,而不是標準。標準一定要遵守,風格不遵守也不會錯,只是變樣了。style , 我玩《鬼泣》的時候就知道什麼叫style , 還是問鳥叔比較好?  自己斟酌。我做過幾個web項目,都是用一些功能粘合起來的,uri 也隨便來設計,刪除一條數據 就用 “deleteBook?id=1”,其實這個是get請求。不知道這是叫什麼,反正肯定不是RESTful。人們總喜歡用Rest 跟 SOAP和XML-RPC 比,說Rest 比後兩者好得多了去,後兩者不是很瞭解啦。有一點值得我們注意的是,我們平時在開發的時候,用的方式可能就是某種模式/風格,我們學習這種模式/風格會讓我們對開發有更好地理解。而這些模式風格哪裏來的呢?我想引用《J2EE核心模式》裏面的話,“模式是總結出來的”。也正解釋了爲什麼我們不知道這種模式但平時卻在用了,因爲這些模式風格也是大師做多了經驗多了總結出來的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章