前言:
最近一段時間,一直在低頭敲代碼,開發平台對外交互的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。真是被老同事一語中的哇。。。