【知識擴展】RESTful 架構學習理解

什麼是RESTful設計模式

首先RESTful 不是技術棧,而是一種軟件架構模式,這種模式主要應用的場景是基於網絡的應用之間的通訊api

REST 全名 Representational State Transfer,表述性狀態轉移,這個表述指的對象就是資源。資源能夠是實體的,也能夠是抽象的,只要能被引用到的均可以稱爲資源。REST裏的資源不單指資源,是資源+表現的組合。全部的操做都是基於資源進行的。緩存

資源與URI的關係安全

  • 資源既然要拿來表述,就須要能經過一種惟一標識來對不一樣資源作區分,這種標識就是稱爲URI(Uniform Resource Identifier)統一資源標識符
  • URI 的設計應對資源的描述是簡潔準確的,已下是我總結的 URI 設計的一些原則:

     1.URI 結尾不該包含 「/」;服務器

     2.URI 當中的 「/」 必需來指示層級關係;網絡

     3.URI 字符過長時,用下劃線 "_" 或 橫線「-」 來分割詞組;架構

     4.URI 不要包含動詞,要採用名詞;負載均衡

     URI 設計最佳實踐沒有絕對正確的答案,REST 也是一種規範不是強制性,一切還要本身把握...post

RESTful的應用設計

RESTful 的使用場景是WEB應用之間的通訊,因此這個架構模式就是爲API開發而生的,使用RESTful 架構的API 也稱爲 RESTful API。RESTful API 沒有官方標準,但一般知足已下6個導向性約束就算知足條件:

1.客戶端/服務器架構:REST 架構由客戶端、服務器和資源構成,經過 HTTP 來處理請求。

2.無狀態:請求所通過的服務器上不會存儲任何客戶端內容。與會話狀態相關的信息會存儲在客戶端上。

3.可緩存性:經過緩存,可免去客戶端與服務器之間的某些交互。

4.分層系統:客戶機與服務器之間的交互能夠經過額外的層來進行調解。這些層能夠提供額外的功能,如負載均衡、共享緩存或安全防禦。

5.按需代碼(可選):服務器可經過傳輸可執行代碼來擴展客戶端的功能。

6.統一接口:這項約束是 RESTful API 的設計核心,共涵蓋 4 個層面:

 (1)識別請求中的資源:請求中的資源會被識別,並與返回給客戶端的表示內容分離開來。

 (2)經過不一樣的表示內容來操縱資源:客戶端會收到表示不一樣資源的文件。這些表示內容必須提供足夠的信息,以便執行修改或刪除操做。

 (3)自描述消息:返回給客戶端的每一個消息都包含充足的信息,用於指明客戶端應該如何處理所收到的信息。

 (4)將超媒體做爲應用狀態的引擎:在訪問某個資源後,REST 客戶端應該可以經過超連接來發現當前可用的全部其餘操做。

RESTful API 很是流行,關於它的標準的產生也是意料之中,如今有比較流行的設計規則 OpenAPI 能夠參照了。

統一資源接口

統一資源接口包含了一組受限的預約義的操做,不論什麼樣的資源,都是經過使用相同的接口進行資源的訪問。接口應該使用標準的HTTP方法如GET,PUT和POST,並遵循這些方法的語義。使用http方法能夠得到安全性和冪等性。安全性是指不管對資源請求多少次,都不會改變資源狀態,冪等性是指不管請求多少次,資源返回結果始終是同樣的。

HTTP方法

安全性

冪等性

GET

安全

冪等

POST

不安全

不冪等

PUT

不安全

冪等

DELETE

不安全

冪等

請求會返回http狀態碼,狀態碼根據請求方法的不一樣意義會有所不一樣,已下是經常使用請求方法狀態碼的彙總:

 200:請求成功

 201:建立新資源成功

 204:請求成功,但返回內容爲空

 301:永久重定向

 400:請求語法錯誤

 403:服務器拒絕了請求

 404:資源未找到

 500:服務器內部錯誤

資源的表述

資源是一種信息實體,有多種外在表現形式,資源經過形式表現出來就叫作資源的表述。例如一個資源既能夠使用Json 格式表現,也能夠使用XML格式。http頭部的「contype-type」屬性就是指定資源的表現形式的。

資源的狀態轉移

在互聯網中,服務端與客戶端交互須要用到 http 協議,而 http 協議是一種無狀態的協議,客戶端若是想修改資源的狀態,只能使用 http 的方法,get、post、put、delete 等來對資源的狀態進行修改。

總結

RESTful 做爲如今最通用的 API 設計模式,主要也是如今 WEB 發展的大潮之下,咱們的服務和應用須要愈來愈多的交互,WEB 應用即軟件,相比厚重的客戶端程序,WEB 應用更加的輕便和高效,越多的數據交互更須要一個通用的交互請求的規範,這也是RESTful 的價值。

相關文章
相關標籤/搜索