首頁 > 軟體

SpringMVC RESTFul及REST架構風格介紹

2022-05-28 22:00:33

一、RESTful 簡介

REST 是一種軟體架構風格。

REST:Representational State Transfer,表現層資源狀態轉移。

對此,有幾個名字需要理解一下:

表現層:實際上就是前端的頁面到後端的控制層。

資源:當應用部署到伺服器上之後,萬物皆資源,比如一個類、一個html頁面等等。

  • 1-資源是一種看待伺服器的方式,即將伺服器看作是由很多離散的資源組成。每個資源是伺服器上一個可命名的抽象概念。
  • 2-因為資源是一個抽象的概念,所以它不僅僅能代表伺服器檔案系統中的一個檔案、資料庫中的一張表等等具體的東西,可以將資源設計的要多抽象有多抽象,只要想象力允許而且使用者端應用開發者能夠理解。
  • 3-與物件導向設計類似,資源是以名詞為核心來組織的,首先關注的是名詞。
  • 4-一個資源可以由一個或多個URI來標識。
  • 5-URI既是資源的名稱,也是資源在Web上的地址。
  • 6-對某個資源感興趣的使用者端應用,可以通過資源的URI與其進行互動。

資源的表述:是一段對於資源在某個特定時刻的狀態的描述。

  • 1-可以在使用者端-伺服器端之間轉移(交換)。
  • 2-資源的表述可以有多種格式,例如HTML/XML/JSON/純文字/圖片/視訊/音訊等等。
  • 3-資源的表述格式可以通過協商機制來確定。
  • 4-請求-響應方向的表述通常使用不同的格式。

狀態轉移:在使用者端和伺服器端之間轉移(transfer)代表資源狀態的表述。通過轉移和操作資源的表述,來間接實現操作資源的目的。

二、RESTful 的實現

具體說,就是 HTTP 協定裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。

它們分別對應四種基本操作:

  • GET 用來獲取資源
  • POST 用來新建資源
  • PUT 用來更新資源
  • DELETE 用來刪除資源

REST 風格提倡 URL 地址使用統一的風格設計,從前到後各個單詞使用斜槓分開。

不使用問號鍵值對方式攜帶請求引數,而是將要傳送給伺服器的資料作為 URL 地址的一部分,以保證整體風格的一致性。比如:

實踐一下

使用 RESTFul 模擬一下使用者資源的增刪改查。

1. get 和 post 請求

控制器方法:

@Controller
public class UserController {
    /**
     * /user    GET     查詢所有使用者資訊
     * /user/1  GET     根據使用者 id 查詢使用者資訊
     * /user    POST    新增使用者資訊
     * /user/1  DELETE  刪除使用者資訊
     * /user    PUT     更新使用者資訊
     */
    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String getAllUser() {
        System.out.println("查詢所有使用者資訊");
        return "success";
    }
    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById() {
        System.out.println("根據使用者 id 查詢使用者資訊");
        return "success";
    }
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public String addUser(String username, String password) {
        System.out.println("新增使用者資訊:" + username + "," + password);
        return "success";
    }
}

test_rest.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>test_rest 頁面</p>
    <a th:href="@{/user}" rel="external nofollow" >查詢所有使用者資訊</a><br>
    <a th:href="@{/user/1}" rel="external nofollow" >根據使用者 id 查詢使用者資訊</a><br>
    <form th:action="@{/user}" method="post">
        使用者名稱:<input type="text" name="username"><br>
        密碼:<input type="password" name="password"><br>
        <input type="submit" name="新增使用者"><br>
    </form>
</body>
</html>

組態檔裡,加上檢視控制:

<mvc:view-controller path="/testRest" view-name="test_rest"></mvc:view-controller>

這樣就可以通過http://localhost:8080/springmvc/testRest存取到test_rest.html的頁面了。

點選測試一下。

2. put 和 delete 請求

由於瀏覽器只支援傳送 get 和 post 方式的請求,那麼該如何傳送 put 和 delete 請求呢?

答案:使用 HiddenHttpMethodFilter 過濾器,可以幫助我們將 POST 請求轉換為 DELETE 或 PUT 請求。

在web.xml中註冊HiddenHttpMethodFilter,這個過濾器要設定在編碼過濾器之後,防止更新操作獲取到的引數是亂碼:

<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>

注意使用的前提條件有 2 個:

  • 當前請求的請求方式必須為 post當
  • 前請求必須傳輸請求引數 _method

那麼前端頁面裡修改的表單應該是成這樣:

<p>修改使用者資訊的表單</p>
    <form th:action="@{/user}" method="post">
        <input type="hidden" name="_method" value="put">
        使用者名稱:<input type="text" name="username"><br>
        密碼:<input type="password" name="password"><br>
        <input type="submit" name="修改"><br>
    </form>

注意這裡name="_method" value="put",value 的值才是真正的方法名。

提交測試一下:

感謝《尚矽谷》的學習資源。

以上就是SpringMVC RESTFul及REST架構風格介紹的詳細內容,更多關於SpringMVC RESTFul架構風格的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com