宋濤+徐慶增+呂思思
摘要:數(shù)據(jù)為王。作為開發(fā)人員,我們經(jīng)常關(guān)注于構(gòu)建優(yōu)秀的軟件來(lái)解決業(yè)務(wù)問(wèn)題。數(shù)據(jù)只是我們軟件完成工作時(shí)要處理的原材料。但是如果你問(wèn)一下業(yè)務(wù)人員,數(shù)據(jù)和軟件哪個(gè)更重要的話,他們很可能會(huì)選擇數(shù)據(jù)。數(shù)據(jù)是許多業(yè)務(wù)的命脈。軟件通常是可以替換的,但是多年積累的數(shù)據(jù)是永遠(yuǎn)不能替換的。近幾年來(lái),以信息為中心的表述性狀態(tài)轉(zhuǎn)移(Representational State Transfer,REST)已成為替換傳統(tǒng)SOAP web服務(wù)的流行方案,為了幫助spring開發(fā)人員使用REST架構(gòu)模式,spring3.0封裝了對(duì)REST的良好支持。好消息是Spring對(duì)REST的支持是構(gòu)建在SpringMVC之上的,我們將基于了解的SpringMVC知識(shí)來(lái)開發(fā)處理RESTful資源的控制器。
關(guān)鍵詞:Spring MVC;REST; 表述性狀態(tài)轉(zhuǎn)移
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)12-0086-02
1了解REST
我敢打賭這并不是你第一次涉及或讀到REST。近年來(lái),關(guān)于REST已經(jīng)有了許多討論,在軟件開發(fā)中你可能會(huì)發(fā)現(xiàn)有一種很流行的做法。那就是在推動(dòng)REST替換SOAP web服務(wù)的時(shí)候,會(huì)談?wù)摰絊OAP的不足。
誠(chéng)然,對(duì)于許多應(yīng)用程序而言,使用SOAP可能會(huì)有點(diǎn)大材小用了,而REST提供了一個(gè)更簡(jiǎn)單的可選方案。問(wèn)題在于并不是每個(gè)人都清楚地了解REST到底是什么。結(jié)果就出現(xiàn)了許多誤解。在談?wù)揝pring如何支持REST之前,我們需要對(duì)REST是什么達(dá)成共識(shí)。
2 REST的基本原理
當(dāng)談?wù)揜EET時(shí),有一種常見(jiàn)的錯(cuò)誤就是將其視為“基于URL的Web服務(wù)”——將REST作為另一種類型的遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call,RPC)機(jī)制,就像SOAP一樣,只不過(guò)是通過(guò)簡(jiǎn)單的HTTP URL而不是SOAP的大量XML命名空間來(lái)觸發(fā)。
恰好相反,REST與RPC幾乎沒(méi)有任何關(guān)系,RPC是面向服務(wù)的,并關(guān)注與行為和動(dòng)作。而REST是面向資源的,強(qiáng)調(diào)描述應(yīng)用程序的食物和名詞。
此外,盡管URL在RSET中起了關(guān)鍵作用,但他們僅僅是整體的一部分而已。
為了了解REST是什么,我們將它的首字母縮寫拆分為不同的組成部分。
1) 表述性(Representational)——REST資源實(shí)際上可以用各種形式來(lái)進(jìn)行表述,包括XML,JSON(JavaScript Objict Notation)甚至HTML——最適合資源使用者的任意形式。
2) 狀態(tài)-(State)—— 當(dāng)使用了REST的時(shí)候,我們更關(guān)注資源的狀態(tài)而不是對(duì)資源采取的行為。
3) 轉(zhuǎn)移(Transfer)——REST涉及轉(zhuǎn)移資源數(shù)據(jù),它以某一種表述性形式從一個(gè)應(yīng)用轉(zhuǎn)移到了一個(gè)應(yīng)用。
更簡(jiǎn)潔的講,REST就是將資源的狀態(tài)已最合適的形式從服務(wù)器端轉(zhuǎn)移到客戶端(或者反之)。
基于對(duì)REST的這種觀點(diǎn),我盡量避免使用諸如REST服務(wù),REST Web服務(wù)或類似的術(shù)語(yǔ),這些術(shù)語(yǔ)會(huì)不恰當(dāng)?shù)貜?qiáng)調(diào)行為。相反,我更愿意強(qiáng)調(diào)REST面向資源的本質(zhì),并談?wù)揜ESTful資源。
3 Spring是如何支持REST的
Spring很早就有導(dǎo)出REST資源的需求。Spring3對(duì)Spring MVC的一些增強(qiáng)功能為REST的提供了良好的支持?,F(xiàn)在,Spring支持以下方式來(lái)開發(fā)REST資源。
1) 控制器可以處理所有的HTTP方法,包含4個(gè)主要的REST方法:GET,PUT,DELETE,以及POST.
2) 新的@pathVariable注解使得控制器能夠處理參數(shù)化的URL(將變量輸入作為URL的一部分)
3) Spring的表單綁定JSP標(biāo)簽庫(kù)的