一 Roy Fieldingweb
2000年Rest被Roy Fielding提出來的,我對Roy Fielding的印象有如下幾個.app
一是RoyFielding作爲Http協議的起草者,在Http協議發佈沒多久跳起來講這個世界上不少人對於Http的使用是錯誤的,因此他說你們應該用Rest.less
二是沒多久RoyFielding作爲Rest思想的啓蒙者,在Rest被人接受並被普遍使用沒多久跳起來講這個世界上不少人對Rest的使用是錯誤的..this
因此我在PPT上選了柏拉圖的一句話作爲副標題,"思想永遠是宇宙的統治者".url
二 Restspa
Rest自己的內容比我想象的多的多,大體列出來幾個關鍵點以下:設計
1.知足如下的Constraints:code
2.設計接口時候的原則component
3.Rest但願實現的目標orm
以上內容都摘自Wiki,稍微整理了一下.感受以上的內容都很深入,因此我簡單的列出來了我認爲理解Rest的重要的地方.
4.Rest對於咱們來講
簡單說,再設計接口的時候,
第一個想到的是,我要提供的資源是什麼.
第二個想到的是,這個資源的展示形式是什麼.
第三個想到的是,這個資源上封裝的操做是什麼
我以爲這些就足夠了.Rest和Soap比有太多的好處了,還有利於SEO(感謝搜索組的兩位大神說到兩點,一個是Url Path自己佔的權重比Parameters高,一個是Url連接自己的權重就比較高.)
若是是設計一個鍵盤精靈的接口的話(以前博客中提到過鍵盤精靈,這裏的主要的功能是查找拼音中以"Q"開頭的產品列表),仿照前段時間四處流行的對比手法寫出來三種不一樣風格的Url接口設計
這時候已經有不少人在爭論Rest有沒有用處,還有很多人在討論Rest的適用場景了,還有人問到比較實際的問題,好比說多參數怎麼解決.
我以爲Rest自己提供的是一種方式,怎麼樣讓這種方式變得更藝術還真的取決於你怎麼去使用他.設計Rest的接口更是一種藝術形式,最簡單的例子,我要看一我的的某個時間段發表的文章列表,可能會有如下幾種設計方式:
1. /person/xdyl/20000101-20000202
2. /person/xdyl/start/20000101/end/20000202
3./person/xdyl?start=20000101&end/20000202
4./person/xdyl/20000101/20000202/
哪一種方式好就看我的喜愛了吧.搜了一下SpringMVC也沒看到有這種解決方案,以前還覺得會有/{a}-{b}/這樣的方式.
若是其餘的朋友有好的解決方案還請多指點.
三 Spring MVC實現.
我以爲Spring MVC的實現很簡單.大概牽涉到兩個地方.
1.Spring 自己怎麼支持從Path中獲取變量的.
2.系統怎麼區分一個請求應該被Spring攔截到仍是應該被直接訪問的靜態資源
第一個問題很簡單.貼段代碼以下:
增刪改查分別修改"method "以對應Http的四種方法(Post,Delete,Put,Get)就行了.
變量直接經過@PathVariable 就能夠拿到.
第二個問題我理解起來也很簡單.用UrlRewriter將全部的請求分紅兩種.動態請求加一個前綴"/app/",配置Spring的攔截器只攔截這種請求. 靜態資源之前綴"/r/"開始,請求路徑不變.
這樣任何一個請求都會乖乖的分紅兩部分,是以"/r/"開始的就不會走Spring,不是以"/r/"開頭全轉成"/app/",交給Spring處理.
主要配置以下
UrlRewrite能夠用其它有一樣功能的任意代替,Apache神馬的最討厭了.
最後附上我用到的UrlRewriter的Pom文件.不記得在哪兒看到的了,先貼上來再說.
Over,這個東西不是一個很詳細的Spring配置說明.我記得第一次配的時候仍是出了很多問題的.不過我以爲源碼若是公開的話就什麼問題都麼有了~
等等看何時能夠把Labs的源碼公開了.