Rest(表述性狀態轉移)


本文的主要內容有:

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對資源的操作

舉例 http://example.com/users/

-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接口定義

clip_image002

2.4REST接口設計

首先介紹URL的組成

-網路協議,這里包含http、https

-服務器地址

-接口名稱

-?參數列表

其次URL定義限定

-不要使用大寫字母

-使用中線-代替下划線——

-參數列表應該被encode過

2.5響應設計

ContentBody僅僅用來傳輸數據

數據要做到拿來就用的原則,不需要“拆箱”的過程

用來描述數據或者請求的元數據放Header,例如x-Result-Fields

響應示例

clip_image002[7]

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 后台代碼錯誤,服務器內部錯誤

clip_image002[11]

3.SpringMVC實現RESTful服務
SpringMVC原生態的支持REST風格的架構的設計

所涉及到注解:

-@RequestMapping

-@PathVariable

-@ResponseBody

………

3.1查詢資源

clip_image002[13]

3.2新增資源

clip_image002[15]

3.3 更新資源

clip_image002[17]

默認情況下,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刪除資源

clip_image002[19]

需要在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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM