- 模型表示(Representations)
- 消息(Messages)
- URIs
- 一致接口(Uniform interface)
- 無狀態(Stateless)
- 資源之間的鏈接(Links between resources)
- 緩存(Caching)
Restful 接口的 冪等性 :對同一Restful接口的訪問,得到的資源狀態是相同的。
安全性: 對該restful接口進行訪問, 不會使服務器的的資源狀態發生改變。
- 無狀態(stateless)
查詢工資是需要登錄系統,進入查詢工資的頁面,執行相關操作后,獲取工資的多少,則這種情況是有狀態的,因為查詢工資的每一步操作都依賴於前一步操作,只要前置操作不成功,后續操作就無法執行;如果輸入一個url即可得到指定員工的工資,則這種情況是無狀態的
RPC風格的服務,受開發服務采用語言的束縛比較大,如.NET框架中,開發web service的傳統方式是使用WCF,基於WCF開發的服務即RPC風格的服務,使用該服務的客戶端通常要用C#來實現
所謂RESTful服務,基本可分為本真REST和hybrid風格兩類
- 遵循ROA體系結構
(1)可尋址(Addressability):資源是可以找的到的,可以訪問的。
(2)無狀態性(Statelessness):每個對資源的請求(如:HTTP請求)都是孤立的,不依賴於其前或后的請求。
(3)連通性(Connectedness):資源通過它的表示彼此連接起來。在Web服務中,它的意思是通過遵循朝連接或提交表單就可以改變服務狀態。
(4)統一接口(Uniform Interface):采用統一的對外操作接口。
3.資源
連接在計算機中,可以通過比特流進行操作的一類實體,必須有個URI,URI(統一資源標識)包括URN(統一資源名稱)和URL(統一資源定位符)
URI一般由三部分組成:
1. 訪問資源的命名機制。
2. 存放資源的主機名。
3. 資源自身的名稱,由路徑表示。
資源是以json(或其他Representation)為載體的、面向用戶的一組數據集,資源對信息的表達傾向於概念模型中的數據:
- 資源總是以某種Representation為載體顯示的,即序列化的信息
- 常用的Representation是json(推薦)或者xml(不推薦)等
- Represntation 是REST架構的表現層
4.統一接口
RESTFul風格的設定是基於數據的元操作,即CRUD(create, read, update和delete,即數據的增刪查改)
- GET(SELECT):從服務器取出資源(一項或多項)。
- POST(CREATE):在服務器新建一個資源。
- PUT(UPDATE):在服務器更新資源(客戶端提供完整資源數據)。
- PATCH(UPDATE):在服務器更新資源(客戶端提供需要修改的資源數據)。
- DELETE(DELETE):從服務器刪除資源。
5.認證機制
基於上述Restful的特性(例如無狀態),那么需要認證機制確認訪問者是誰,該訪問者對該資源是否具有使用、修改、刪除等等相關權限,而這認證機制是每個系統內部限定的
常用的認證機制包括 session auth(即通過用戶名密碼登錄),basic auth,token auth和OAuth,服務開發中常用的認證機制為后三者
Basic Auth(BA)是配合RESTful API 使用的最簡單的認證方式,只需提供用戶名密碼即可,但由於有把用戶名密碼暴露給第三方客戶端的風險,在生產環境下被使用的越來越少。因此,在開發對外開放的RESTful API時,盡量避免采用Basic Auth
Token Auth並不常用,它與Basic Auth的區別是,不將用戶名和密碼發送給服務器做用戶認證,而是向服務器發送一個事先在服務器端生成的token來做認證。因此Token Auth要求服務器端要具備一套完整的Token創建和管理機制,該機制的實現會增加大量且非必須的服務器端開發工作,也不見得這套機制足夠安全和通用,因此Token Auth用的並不多。
OAuth(開放授權)是一個開放的授權標准,允許用戶讓第三方應用訪問該用戶在某一web服務上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。
OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的第三方系統(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。
