前言:
最近一段時間,一直在低頭敲程式碼,開發平臺對外互動的API介面,功能已經大體完成了,回過頭來看看自己的介面設計文件,不勝感慨,想當初自己也是為“介面名稱”想破了腦袋,各種百度英文。今天一位老同事走過來看了一眼,隨口說了一句,你這介面一點Restful風格沒有。。。看一眼你的介面命名規則就知道,我只能點點頭,也是。
之前也有接觸過REST介面設計風格,時間長了,終究還是都還回去了。今天也是準備把這塊知識點拾掇起來,再重新認識一下,感興趣的同學可以一起來了解了解。
正文:
先簡單說說什麼是Restful API
RESTFUL是一種網路應用程式的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。
RESTFUL是一種架構風格,定義了一組規則和約束,符合REST風格的API介面稱作為Restful API。
REST(Representational State Transfer)中文翻譯過來可以理解為“表現層狀態轉化”
主要特點:
1.資源
REST全稱是表現層狀態轉化,那究竟指的是什麼的表現? 其實指的就是資源,現實網路中各種各樣資訊的傳遞,互動,我們可以將這些資訊抽象為資源,比如一張圖片,一段文字,一個檔案等。
在網路中我們使用“統一資源標識”即URI(Uniform Resource Identifier)來標識一個資源,類似於給你一張身份證,大家根據身份證就能知道你是誰。
REST風格可以說是“面向資源”的,它請求的是一個資源,該資源往往用一個名詞表示,不會出現動詞(也是區別於RPC風格的一點)。
2.表現層
REST全稱是表現層狀態轉化,既然是面向資源,為什麼不叫“資源狀態轉化”呢?
我們會發現往往在網路中互動的都是xml,json,html等格式資料,這些格式可以理解為資源對外表現的一種形式,這也就說明了實際上網路中互動的是“資源的表現”,並不只是單純的資源本身。
3.狀態的轉化
現實網路中,往往是客戶端發起一個請求,服務端進行相應的回應。在這個過程中,勢必涉及到資料和狀態的變化。而網際網路通訊協議HTTP,是一個無狀態協議。這也就意味著,資源的狀態都儲存在伺服器端。由客戶端發起POST,PUT等操作,引起服務端對資源進行操作,發生“狀態的轉化”。
4.資源的連結(超媒體概念)
資源的連結可以理解為從一個資源跳轉到另一個資源
實際應用中我們發起對一個介面的請求,介面會返回一些資料,這些資料可能除了圖片,json字串等,有時候還會包含一個地址,這個地址往往是對下一個資源請求的地址。
5.HTTP動詞
GET-查詢 安全,冪等性
POST-新增或者更新 非安全,非冪等性
PUT(客戶端提供改變後的完整資源)-更新 非安全,冪等性
PATCH(客戶端提供改變的屬性)-更新 非安全,冪等性
DELETE-刪除 非安全,冪等性
安全性:操作不會改變資源的狀態
冪等性:操作一次和操作N次,對資源改變的效果是一樣的。
小結
綜合上面的解釋,我們總結一下什麼是RESTful架構:
(1)每一個URI代表一種資源;
(2)客戶端和伺服器之間,傳遞這種資源的某種表現層;
(3)客戶端通過四個HTTP動詞,對伺服器端資源進行操作,實現"表現層狀態轉化"。
經過上面的瞭解,回過頭來再看看我之前設計的介面URL,比如:htpp://localhost/Person/GetAll。真是被老同事一語中的哇。。。