SpringMVC中的RestFul風格理解

2021-10-05 15:31:43 字數 3798 閱讀 9406

概念:restful架構:是一種設計的風格,並不是標準,只是提供了一組設計原則和約束條件,也是目前比較流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多**的採用。

1.他會對url進行規範:

a) 非rest風格的url:localhost:8080/springmvc?username=aa&password=bb;

b) rest風格的url:localhost:8080/springmvc/aa/bb;

優點:簡潔、安全

所有的url都可以當成是資源

2.對http的方法進行規範

a)不管是刪除,新增,更新….使用的url都是一致,那麼如果需要刪除,就把http的方法設定刪除

b) 控制器:通過判斷http的方法來執行操作(增刪改查)

目前這種做法還沒有被廣泛採用

3.對contenttype也進行規範

a) 就是在請求是指定contenttype的型別(json互動中就有體現)

4.接下來看看springmvc中怎麼實現restful風格

其次:方法的形參上要@pathvariable("name")來匹配上面的引數,這裡@pathvariable中的字串必須和你{}中的名字一致

訪問路徑:localhost:8080/工程名/hello_rest/xx/xx(其中xx就是你隨便填寫的內容,它會匹配到後台的name和password的值)

比如:你輸入的路徑是:localhost:8080/hello/aa/admin

後台會匹配到:username="aa",password="bb"

/**

* 1.路徑的變化:/hello//其中{}相當於可以的引數

* 2.引數的寫法:需要利用@pathvariable("name")來匹配上面的引數

* 3.至於@pathvariable後面跟的形參你就可以隨便命名了

* @param username

* @param password

* @return

*/public string hello_rest(@pathvariable("username") string username,

@pathvariable("password") string password)

return "hello";

}

這種寫法和第一種類似,只不過是把{}動態匹配引數的放到前面去了,其原理是一樣的,不多說,直接看看這個訪問路徑的寫法就好

訪問路徑:localhost:8080/xx/xx/hello

只是把引數由後面放到前面去了而已。

/**

* 1.路徑的變化:///hello_rest其中{}相當於可以的引數

* 2.引數的寫法:需要利用@pathvariable("username")來匹配上面的引數

* 3.至於@pathvariable後面跟的形參你就可以隨便命名了

* @param username

* @param password

* @return

*/public string hello_rest2(@pathvariable("username") string username,

@pathvariable("password") string password)

return "hello";

}

rest,它的全稱是representational state transfer,翻譯過來是表現層或者說是表象性的的狀態轉換。提到這個不得不說一下軟體開發的三層架構

通常意義上的三層架構就是將業務應用劃分成:表現層,業務邏輯層,資料訪問層。

1). 表現層: 應用中唯一使用者可見的層,即使用者介面

2). 業務邏輯層: 對業務邏輯的處理,對資料層的操作

3).資料訪問層: 對於資料庫的操作,包括增、刪、改、查。當然了,資料訪問層不僅僅訪問資料庫還可以訪問二進位制檔案,xml文件等。

那這裡的表現層或者表象指的又是怎麼樣的乙個表現呢?其實這個表現指的是資源的表現,最終展現出來的資源結果。

所謂的資源和我們平常理解的一樣,比如朋友推薦給我們一部好看的電影,我們經常會問朋友,哎,有沒有資源?這就是我們所說的,不管是電影,文字,還是**,都可以被稱為資源。那我們要怎麼去查詢到這個資源呢?

這是我們就要引入乙個概念,叫做uri。統一資源識別符號(uniform resource identifier),它是乙個用於標識某一網際網路資源名稱的字串,簡單來說uri就是資源所在的位置,後端將資源發布為uri,前端通過uri訪問資源,接下來並通過http動詞表示要對資源進行的操作,就是rest中所說的狀態轉換。

綜上所述,我們在後端進行增刪改查,將處理的結果返回給前端,處理的結果就是我們說的資源。

restful對資料格式沒有限制,就算你用的是xml或者其他格式都可以,但是大部分會選擇是返回json字串。

用一小段**解釋一下

@responsebody註解,就不會走視**析器,不會返回頁面,目前返回的json資料

value中的值就是我們說的uri

get操作就是我們用的http動詞來讓狀態裝換。

public @responsebody listgetuserinfo()

我們可以看到前端返回的是這樣的json字串的結果。

我們看一下它的位址

現在我們知道了rest是一種面向資源服務的api設計方式,可以唯一標識和定位資源。 對於該url標識的資源做何種操作是由http的動詞決定的。 rest請求方法有4種,包括get,post,put,delete.分別對應獲取資源,新增資源,更新資源及刪除資源.

那為什麼現在我們要用restful這種風格去設計我們的api呢?

我們來說一下rest的優點和特徵。

其一:我們以api為界限進行解耦首先就是為了分離前後端

restful api 就可以通過一套統一的介面為所有客戶端提供web服務,實現前後端分離。

還有一點就是rest是無狀態的,換句話說,伺服器端不能儲存來自某個客戶的某個請求中的資訊,並在該客戶的其他請求中使用。

所謂無狀態的,即所有的資源,都可以通過uri定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而改變。有狀態和無狀態的區別,舉個簡單的例子說明一下。

如查詢英雄的攻擊力,如果查詢是需要登入系統,進入查詢的頁面,執行相關操作後,獲取攻擊力的多少,則這種情況是有狀態的,因為查詢英雄攻擊力的每一步操作都依賴於前一步操作,只要前置操作不成功,後續操作就無法執行;

如果輸入乙個url即可得到指定英雄的攻擊力,則這種情況是無狀態的,因為獲取英雄攻擊力不依賴於其他資源或狀態,且這種情況下,英雄攻擊力是乙個資源,由乙個url與之對應,可以通過http中的get方法得到資源,這是典型的restful風格。

其三:返回有用的錯誤資訊(message)

恰當地理解和返回http status(狀態碼)。200=成功,404=資源不存在,500=伺服器端錯誤等等

綜合以上所說,大家應該對restful風格的流行有了感觸吧,restful好就好在它可以最大程度的隔離操作,不會使關聯操作互相受影響,它的url是一致的,不會混亂。

但是要真正學會rest還有很長的路要走。

springmvc使用rest風格的404錯誤

當使用rest風格出現404錯誤時,blogservlet name org.springframework.web.servlet.dispatcherservletservlet class contextconfiglocationparam name classpath config mvc...

springMVC之Rest風格的URL

rest風格的url 以crud為例 新增 order post 修改 order 1 put 非rest風格的url為 update?id 1 獲取 order 1 get 非rest風格的url為 get?id 1 刪除 order 1 delete 非rest風格的url為 delete?id...

spring MVC 配置rest風格URL

最近公司要用spring mvc,所以上網學習了一下,發現很不錯,這裡說說怎麼配置res風格的url 如 http localhost 8080 test user login 新增spring org.springframework.web.servlet.dispatcherservlet co...