RPC和REST区别
首先要明確一點:REST 實際上只是一種設(shè)計風(fēng)格,它并不是標(biāo)準(zhǔn)。(所以你可以看到網(wǎng)上一大堆的各種最佳實踐,設(shè)計指南,但是沒有人說設(shè)計標(biāo)準(zhǔn))。
?
說說幾個重要的概念:
1、REST 是面向資源的,這個概念非常重要,而資源是通過 URI 進(jìn)行暴露。
URI 的設(shè)計只要負(fù)責(zé)把資源通過合理方式暴露出來就可以了。對資源的操作與它無關(guān),操作是通過 HTTP動詞來體現(xiàn),所以REST 通過 URI 暴露資源時,會強(qiáng)調(diào)不要在 URI 中出現(xiàn)動詞。
比如:左邊是錯誤的設(shè)計,而右邊是正確的
?GET /rest/api/getDogs --> GET /rest/api/dogs 獲取所有小狗狗
GET /rest/api/addDogs --> POST /rest/api/dogs 添加一個小狗狗
GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一個小狗狗
GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 刪除一個小狗狗
左邊的這種設(shè)計,很明顯不符合REST風(fēng)格,上面已經(jīng)說了,URI 只負(fù)責(zé)準(zhǔn)確無誤的暴露資源,而 getDogs/addDogs...已經(jīng)包含了對資源的操作,這是不對的。相反右邊卻滿足了,它的操作是使用標(biāo)準(zhǔn)的HTTP動詞來體現(xiàn)。
2、REST很好地利用了HTTP本身就有的一些特征,如HTTP動詞、HTTP狀態(tài)碼、HTTP報頭等等
REST API 是基于 HTTP的,所以你的API應(yīng)該去使用 HTTP的一些標(biāo)準(zhǔn)。這樣所有的HTTP客戶端(如瀏覽器)才能夠直接理解你的API(當(dāng)然還有其他好處,如利于緩存等等)。REST 實際上也非常強(qiáng)調(diào)應(yīng)該利用好 HTTP本來就有的特征,而不是只把 HTTP當(dāng)成一個傳輸層這么簡單了。
HTTP動詞
?GET 獲取一個資源
POST 添加一個資源
PUT 修改一個資源
DELETE 刪除一個資源
實際上,這四個動詞實際上就對應(yīng)著增刪改查四個操作,這就利用了HTTP動詞來表示對資源的操作。
HTTP狀態(tài)碼
?200 OK
400 Bad Request
500 Internal Server Error
在 APP 與 API 的交互當(dāng)中,其結(jié)果無非就三種狀態(tài):
- 所有事情都按預(yù)期正確執(zhí)行完畢 - 成功
- APP 發(fā)生了一些錯誤 – 客戶端錯誤
- API 發(fā)生了一些錯誤 – 服務(wù)器端錯誤
這三種狀態(tài)與上面的狀態(tài)碼是一一對應(yīng)的。
HTTP報頭
?Authorization 認(rèn)證報頭
Cache-Control 緩存報頭
Cnotent-Type 消息體類型報頭
......
報頭還有很多,不一一列舉。HTTP報頭是描述HTTP請求或響應(yīng)的元數(shù)據(jù),它的作用是客戶端 與 服務(wù)器端進(jìn)行相互通信時,告訴對方應(yīng)該如何處理本次請求。
3、超媒體
老實說,這個詞匯我到目前還有沒搞得全懂。那也說說自己的理解吧,不一定準(zhǔn)確哦,有錯誤希望指出。
”超媒體“ 你沒聽說過沒關(guān)系,”超鏈接“ 你一定不會陌生。簡單來說,”超鏈接“ 是實現(xiàn)超媒體中的一種方式。”超媒體“希望達(dá)到一種就是說在 REST API 中把所有資源給鏈接起來。它就猶如你打開一個網(wǎng)站的首頁,你難道看到的只有首頁嗎?NO !, 不是的,你可以通過首頁查看商品、查看文章、查看論壇。”超媒體“ 就是做這個事情,它利用 API 把所有資源的關(guān)系給鏈接起來了,你看到不會只是一個獨立的資源,而是關(guān)系網(wǎng)中的一個資源。
”超媒體“ 有點高大上了,老實說,就算你夠牛X,寫出了一個非常棒的符合”超媒體“的REST API,你的用戶即開發(fā)者,也不一定能夠接受你這種高大上的設(shè)計。當(dāng)然,我相信未來也許可以普及了。
4、最后
上面只是簡單說了一些自己最近做REST的一些體驗吧。有關(guān)于REST的介紹文章實在是太多了,當(dāng)然很多寫得也非常不錯,我這里?aisuhua/restful-api-design-references · GitHub?收集了一些,喜歡的話可以看看,有更好的可以推薦給我。對于上面的回答,有任何不對,都希望您能指出,大家共同進(jìn)步,謝謝大家!
?
?
鏈接:https://www.zhihu.com/question/28557115/answer/47846156
總結(jié)
以上是生活随笔為你收集整理的RPC和REST区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年中国全屋智能行业研究白皮书
- 下一篇: LIVE555再学习 -- Linux