02.25 什麼是RESTful風格的API設計?


什麼是RESTful風格的API設計?


隨著移動互聯網的興起,RESTful風格的API設計也隨之流行起來,但我們說了那麼多RESTful設計,它到底是什麼?本篇文章帶大家來了解一下它的真實面目。

RESTful概念

首先,我們需要明確的是RESTful,它是一個理念,是一個設計規範,而並不是什麼協議等。

REST,全稱Representational State Transfer,直接翻譯就是:表現層狀態轉化。而該翻譯之所以晦澀是因為缺少了主語,準確來說應該是“Resource Representational State Transfer”。

通俗來講,就是“資源在網絡中以某種表現形式進行狀態轉化”。

REST概念是Roy Thomas Fielding在他2000年的博士論文中提出的,他是HTTP協議(1.0版和1.1版)的主要設計者。

有了對RESTful基礎概念的瞭解,我們分別來看看其相關概念的解釋。

資源

“資源”是RESTful中最核心的概念之一。在RESTful概念中,互聯網中的每一樣信息都可以定義為資源,比如文本、圖片、音頻、視頻等。而這些資源又都可以對應一個特定的URI(統一資源定位符),URI為每一個資源的地址或獨一無二的識別符。

表現層

針對上面的“資源”,我們要進行相應的呈現,而且可以採用多種的呈現形式,而這些呈現形式就叫做“表現層”。

就拿文本為例,我們可以呈現為JSON格式、XML格式、HTML格式,甚至二進制格式等。這就是表現層所做的事情。

狀態轉化

資源通常放在服務器端,而客戶端對服務器資源的增、刪、改、查等操作,便涉及到資源狀態的轉化。這個過程便是“ 狀態轉化”。

我們以HTTP協議為例(RESTful不僅僅適用HTTP協議,只不過經常以HTTP協議為襯托),客戶端可通過一些操作讓服務器端的資源發生變化。

而這整個過程,便是“表現層狀態轉化”。

在HTTP中,提供了四種常見的操作方式:GET、POST、PUT、DELETE。

這四種操作方式分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。

為什麼要使用RESTful風格呢

這是因為RESTful風格的設計擁有以下特點:結構清晰、符合標準、易於理解、擴展方便。

試想一下,如果採用傳統的JSP模式,頁面內容和代碼混合在一起,而此時項目功能需新增移動端、微信小程序等其他客戶端,是否需要重新定義接口?

而採用RESTful的定義,不僅結構清晰,更重要的是易於擴展、適用性更廣泛。

RESTful風格示例

以用戶(User)的增刪改查為例,我們可以設計出一下接口形式:每列分別對應,(請求類型:請求地址:功能描述)

  • get : /user/list :獲取所有用戶信息
  • post:/user:創建用戶信息
  • put:/user:更新用戶信息
  • get:/user/1:獲取資源標識(id)為1的用戶信息
  • delete:/user/1:刪除資源標識(id)為1的用戶信息

看起來是不是簡潔、清晰、方便很多?

如果再和SpringBoot結合起來,那就更加方便。下面展示部分通過SpringBoot來實現Controller層的代碼。

<code>@RestController@RequestMapping("/user")public class RestfulController {    @Resource    private UserService userService;    /**     * 創建用戶操作     */    @PostMapping    public User addUser(User user) {        return userService.addUser(user);    }    /**     * 獲取所需用戶操作     */    @GetMapping("/list")    public List<user> listUser() {        return userService.findAll();    }    /**     * 更新用戶     */    @PutMapping    public User update(User user) {        return userService.update(user);    }    /**     * 修改用戶名     */    @PatchMapping    public User updateUsername(User user) {        return userService.updateUsername(user);    }    /**     * 獲取用戶     */    @GetMapping("{id}")    public User get(@PathVariable("id") Long id) {        return userService.findById(id);    }    /**     * 刪除用戶     */    @DeleteMapping("{id}")    public void delete(@PathVariable("id") Long id) {        userService.delete(id);    }}/<user>/<code>


精品SpringBoot 2.x視頻教程

https://edu.csdn.net/course/detail/20369,精品Spring Boot 2.x視頻教程,打造一套最全的Spring Boot 2.x視頻教程。

本文首發來自微信公眾號:程序新視界。一個軟實力、硬技術同步學習的平臺。


分享到:


相關文章: