「服務」與「API」是一個非常模糊的問題。通常,這兩個術語可以互換使用。 「REST」與「RPC」有點容易解釋。
通常使用REST,URL表示特定資源,例如「用戶」,「帳戶」等。通常,您可以使用HTTP方法POST/GET創建/檢索/更新/刪除這些資源/ PUT/DELETE。要更新用戶1125配置文件,你可以發送以下:你想與用戶1125做
POST /user/1125 HTTP/1.1
Host: wherever.com
Content-type: application/x-www-form-urlencoded
firstName=Davey&lastName=Jones&email=dj%40thebrineydeep.com
任何事情,你會發送到同一個URL的請求。這個想法有例外和變種,但這是它的關鍵。
RPC服務更像是使用函數庫,它綁定到特定的URL。你可能有一大堆相關的功能都綁定在URL /services/json
上。這時如果你想改變天寒老戴維·瓊斯,你會:
POST /services/json HTTP/1.1
Host: wherever.com
Content-type: application/json
{ "jsonrpc": "2.0",
"id": 1,
"method": "setProfile",
"params": [ 1125,
{ "firstName": "Davey",
"lastName": "Jones",
"email": "[email protected]"
}
]
}
我個人很喜歡JSON-RPC更好,因爲:
- 我沒有嘗試適合所有的我函數調用某種資源到URL映射可能沒有意義
- 我們不嘗試重載HTTP響應代碼以指示API錯誤。每個請求都會返回一個200響應(除非存在服務器錯誤),並且您從響應主體瞭解您是否遇到錯誤。 JSON-RPC特別擅長明確錯誤條件。
有時REST是更好,因爲:
- 有時資源到URL映射配合得很好
- 更直觀的第三方理解
- 它提供了一個簡單的模型只是檢索容易識別的信息
我不認爲任何人都更容易編碼。
編輯我更改了REST示例以使用更常見的表單編碼數據而不是JSON。但是,您當然可以使用REST指定您喜歡的任何數據格式。它不是刻在石頭上。
在這裏你有一個比較http://stackoverflow.com/questions/1098473/rest-vs-rpc – Chuidiang
如果你想RPC使用SOAP。否則REST。 –