本文的主要內容有:
1.了解Rest
2.了解RESTful WebService
3.使用SpringMvc實現RESTful
------------------------------我是華麗的分割線,下面是正文--------------------------------------------------
1,REST是什么
a,出身:由Roy Thomas Fielding博士於2000年提出
b,全稱:Representational state Transfer,稱為表象化狀態轉變,或者表述性狀態轉移
c,REST是Web服務的一種架構風格
d,使用HTTP、URI等廣泛流行的標准和協議
e,輕量級、跨平台、跨語言的架構設計
那么,從上面5點總結來看,REST到底是個什么鬼呢?好了,下面要注意了,重點來了:REST是一種設計風格,它既不是一種標准,也不是一種軟件,而是一種思想。它通常使用HTTP、URI和XML、json以及HTML這些現有的流行的協議和標准
2,我們來介紹RESTful是什么?
a,RESTful對應中文是REST式的
b,RESTful WebService 是一種常見的REST的應用,是遵守REST風格以及Web風格的Web服務
c,REST式的Web服務是一種ROA((Resource-Oriented Architecture,面向資源架構)
2.1REST架構的主要原則
a,網絡上的所有資源都可以被抽象為資源(Resource)
b,每個資源都有一個唯一的資源標識符(Resource identifier)
c,同一資源具有多種表現形式,例如xml,json
d,對資源的各種操作不會改變資源的標識符
e,所有的操作都是無狀態的(stateless)[無狀態:HTTP是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力,如果后續需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大]
f,符合REST原則的架構方式均可被稱為RESTful
2.2REST對資源的操作
-GET:表示獲取一個資源
-POST:表示創建一個新的資源
-PUT:表示修改一個資源的狀態
-DELETE:表示刪除一個資源
資源展現:-XML -JSON
在這里我們回憶一下之前是怎么操作的呢:
http://example.com/users/query/1 GET 表示根據用戶id查詢用戶數據
http://example.com/users/save POST表示新增用戶
http://example.com/users/update POST修改用戶用戶信息
http://example.com/users/delete GET/POST 表示刪除用戶
請看RESTful的操作
http://example.com/users/1 GET表示根據用戶id查詢用戶信息
http://example.com/users POST表示新增用戶信息
http://example.com/users PUT 表示修改用戶信息
http://example.com/users DELETE表示刪除用戶信息
注意:在RESTful請求的路徑上,沒有資源操作的動詞,資源操作的描述
2.3REST接口定義
2.4REST接口設計
首先介紹URL的組成
-網路協議,這里包含http、https
-服務器地址
-接口名稱
-?參數列表
其次URL定義限定
-不要使用大寫字母
-使用中線-代替下划線——
-參數列表應該被encode過
2.5響應設計
ContentBody僅僅用來傳輸數據
數據要做到拿來就用的原則,不需要“拆箱”的過程
用來描述數據或者請求的元數據放Header,例如x-Result-Fields
響應示例
2.6指定響應的屬性字段
無狀態服務器應該允許客戶端對數據按需提取,在請求頭使用x-result-fields指定數據返回的字段集合
例如:trade有trade_id,trade_name,created_at三個屬性,客戶端只需其中的trade_id,trade_name兩個屬性
Request Header
X-Result-Fields:trade_id,trade_name
2.7http常用的響應狀態碼
200 操作成功
201 對象創建成功
204 操作成功,但是沒有響應體
404 資源不存在
500 后台代碼錯誤,服務器內部錯誤
3.SpringMVC實現RESTful服務
SpringMVC原生態的支持REST風格的架構的設計
所涉及到注解:
………
3.1查詢資源
3.2新增資源
3.3 更新資源
默認情況下,PUT請求是無法提交表單數據的,需要在web.xml中添加過濾器解決:
<!-- 解決PUT請求無法提交表單數據的問題 -->
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.4刪除資源
需要在web.xml中添加過濾器解決DELETE請求無法提交表單數據的問題:
注意:表單提交的時候,仍然是Post 請求,但是需要多一個請求參數 _method=DELETE
<!--
將POST請求轉化為DELETE或者是PUT
要用_method指定真正的請求參數
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>