統一接口REST VS RPC
REST使用HTTP協議的通用方法作爲統一接口的詞彙,方法信息都在HTTP方法裏;
RPC服務提供的方法信息在SOAP/HTTP信封裏。
REST方法設計
HTTP請求方法可以從安全性和冪等性進行考慮:
安全性:外系統對該接口的訪問不會使服務器資源的狀態發生改變;
冪等性:外系統對統一REST接口訪問得到的資源狀態是相同的。
方法名 | 冪等性 | 安全性 | 補充 |
---|---|---|---|
GET | 冪等 | 安全 | 只讀的, 但是設計不良的API可能造成假GET |
PUT | 冪等 | 不安全 | 更新/添加資源,添加資源只有當客戶端創建連接請求的時候使用PUT |
DELETE | 冪等 | 不安全 | 刪除資源,可以返回void |
POST | 不冪等 | 不安全 |
添加資源;RESTful中爲POST(a),RPC中爲POST(p),需要先解析信封才能獲取真正方法 |
WebDAV 對HTTP1.1的擴展協議,增加了些協作方法,但是違背了REST統一接口受歧義。
Demo
REST資源設計
資源地址的設計是面向資源的,資源名稱應是準確描述該資源的名詞,資源地址應具有直觀的描述性。一個URI資源地址唯一對應一個資源,但是一個資源可以擁有多個RUI資源地址。
資源地址的設計良否涉及系統的可用性、可維護性和可擴展性等諸多方面的表現。
資源地址
資源地址具體可以分爲五個部分: scheme://host:port/path?queryString
元素 | 描述 |
---|---|
scheme | 協議名稱,通常是HTTP和HTTPS |
host | (DNS)主機名或IP地址 |
port | 服務端口 |
path | 資源地址,用“/“符號分隔邏輯上的層級結構 |
? | 用來分隔資源地址和查詢字符串的符號 |
queryString |
查詢字符串,方法作用域信息 使用”&“符號分隔查詢條件 使用逗號分隔有次序的作用域信息 使用分號分隔五次序的作用域信息 |
功能 | 資源地址 | 說明 |
---|---|---|
添加/創建 |
POST /books PUT /books/{id} |
|
刪除 | DELETE /books/{id} | |
修改/更新 | PUT /books/{id} | |
查詢全部 | GET /books HTTP1.1 | |
主鍵查詢 |
GET /books/{id} HTTP1.1 GET /books?id=132456789 |
|
分頁作用域查詢 |
GET /books?start=0&size=10 GET /books/01,2002-12,2014 GET /books/restful;program=java;type=web GET /books?limit=100&sort=bookname |
起始頁0,頁條10; 逗號分隔次序:2002年1月到2014年12月 分號做並列查詢,查詢條件同級 每頁100條,按書名排序 |