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