如何清楚的理解REST以及Restful

  • 1、什麼是REST?

看很多對REST的解釋就是REpresentational State Transfer,直接翻譯爲:表現層狀態轉移。這個概念看上去很是懵逼。
以下是自己看了網上一些通俗的解釋整理下來的:
全稱是Resource Representational State Transfer,通俗的來講就是:資源在網絡中以某種表現形式進行狀態轉移。
要想理解這句話首先需要弄清楚什麼是資源

Resource:資源,即數據(前面說過網絡的核心)。比如網絡上的所有事物都被抽象爲資源。資源可以是實體(例如手機號碼),也可以只是一個抽象概念(例如價值) 。

下面是一些資源的例子:
某用戶的手機號碼
某用戶的個人信息
最多用戶訂購的商品套餐
兩個產品之間的依賴關係
某用戶可以辦理的優惠套餐
某手機號碼的潛在價值

每個資源都有一個唯一的資源標識符URI,要獲取這個資源,訪問它的URL就可以,因此URL就成了每一個資源的地址。

Representational:資源的某種表現形式,資源具有多種表現形式,比如用JSON,XML,JPEG等;
State Transfer:資源的狀態變化。通過HTTP動詞表達。

所以概括來講:URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述對資源的操作。

一個url就是一個資源,所有的操作都是對資源的更改而言的角度上啊。​​​​​​

  • 2、什麼是RESTful
    基於REST構建的API就是Restful風格。

REST,名詞,實際上只是一種設計風格,它並不是標準。所以你可以看到網上一大堆的各種最佳實踐,設計指南,但是沒有人說設計標準。

RESTful,形容詞,指實現了 REST規範的系統,如實現了REST規範的Web API就叫RESTful API。
REST 是面向資源的,這個概念非常重要,而資源是通過 URL 進行暴露。

在Restful之前的操作:
http://127.0.0.1/user/query/1 GET  根據用戶id查詢用戶數據
http://127.0.0.1/user/save POST 新增用戶
http://127.0.0.1/user/update POST 修改用戶信息
http://127.0.0.1/user/delete GET/POST 刪除用戶信息

 

RESTful用法:
http://127.0.0.1/user/1 GET  根據用戶id查詢用戶數據
http://127.0.0.1/user  POST 新增用戶
http://127.0.0.1/user  PUT 修改用戶信息

REST是Roy Thomas Fielding在他2000年的博士論文中提出的。通俗點講,這個設計的初衷就是作者要告訴我們,HTTP協議是這樣設計的,別用錯了。原因是http本質就是對資源的各種操作,資源用URL定位,操作用method表示,但很多應用都是把操作放到URL表示,那method有何意義?就是所有的Url本質來講,都應該是一種資源。一個獨立的Url地址,就是對應一個獨一無二的資源。

 

  • 3、RESTful API有哪些特點

(1)基於“資源”,數據也好、服務也好,在RESTFul設計裏一切都是資源。REST 是面向資源的,而資源是通過 URL 進行暴露。

URI 的設計只要負責把資源通過合理方式暴露出來就可以了。對資源的操作與它無關,操作是通過 HTTP動詞來體現,所以REST 通過 URI 暴露資源時,會強調不要在 URI 中出現動詞。

在Restful之前的操作:
http://127.0.0.1/user/query/1 GET  根據用戶id查詢用戶數據
http://127.0.0.1/user/save POST 新增用戶
http://127.0.0.1/user/update POST 修改用戶信息
http://127.0.0.1/user/delete GET/POST 刪除用戶信息

RESTful用法:
http://127.0.0.1/user/1 GET  根據用戶id查詢用戶數據
http://127.0.0.1/user  POST 新增用戶
http://127.0.0.1/user  PUT 修改用戶信息

(2)無狀態。一次調用一般就會返回結果,不存在類似於“打開連接-訪問數據-關閉連接”這種依賴於上一次調用的情況。

所謂無狀態的,即所有的資源,都可以通過URI定位,而且這個定位與其他資源無關,也不會因爲其他資源的變化而改變。有狀態和無狀態的區別,舉個簡單的例子說明一下。如查詢員工的工資,如果查詢工資是需要登錄系統,進入查詢工資的頁面,執行相關操作後,獲取工資的多少,則這種情況是有狀態的,因爲查詢工資的每一步操作都依賴於前一步操作,只要前置操作不成功,後續操作就無法執行;如果輸入一個url即可得到指定員工的工資,則這種情況是無狀態的,因爲獲取工資不依賴於其他資源或狀態,且這種情況下,員工工資是一個資源,由一個url與之對應,可以通過HTTP中的GET方法得到資源,這是典型的RESTful風格。

(3)URL中通常不出現動詞,只有名詞URL語義清晰、明確。

(4)使用HTTP的GET、POST、DELETE、PUT來表示對於資源的增刪改查

REST很好地利用了HTTP本身就有的一些特徵,如HTTP動詞、HTTP狀態碼、HTTP報頭等等
REST API 是基於 HTTP的,所以你的API應該去使用 HTTP的一些標準。這樣所有的HTTP客戶端(如瀏覽器)才能夠直接理解你的API(當然還有其他好處,如利於緩存等等)。REST 實際上也非常強調應該利用好 HTTP本來就有的特徵,而不是隻把 HTTP當成一個傳輸層這麼簡單了。

RESTful架構風格規定,數據的元操作,即CRUD,分別對應於HTTP方法:GET用來獲取資源,POST用來新建資源(也可以用於更新資源)PUT用來更新資源,DELETE用來刪除資源,這樣就統一了數據操作的接口,僅通過HTTP方法,就可以完成對數據的所有增刪查改工作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章