RESTful
RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用於移動互聯網廠商作為業務使能接口的場景,實現第三方OTT調用移動網絡資源的功能,動作類型為新增、變更、刪除所調用資源。
https://baike.baidu.com/item/RESTful/4406165?fr=aladdin
HTTP
http是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。請求和響應消息的頭以ASCII碼形式給出;而消息內容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因為它使得開發和部署是那么的直截了當。
https://baike.baidu.com/item/HTTP/243074
RPC
RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。SAP系統RPC調用的原理其實很簡單,有一些類似於三層構架的C/S系統,第三方的客戶程序通過接口調用SAP內部的標准或自定義函數,獲得函數返回的數據進行處理后顯示或打印。
https://baike.baidu.com/item/遠程過程調用/7854346?fromtitle=RPC&fromid=609861&fr=aladdin
對比
RESTful基於HTTP,所以RPC與HTTP對比就等於RPC與RESTful對比。
RPC與RESTful
先科普一下
REST 和 RESTful 什么區別?
REST(Representational State Transfer):表現層狀態轉移,一種軟件架構風格,不是標准。既然不是標准,我可以遵守,也可以不遵守!!!
什么是表現層狀態轉移:
Representational (表現層)
State Transfer(狀態轉移):通過HTTP動詞實現。
總結:URL定位資源,通過Http動詞去操作URL標識的資源(get(獲取),pst(添加),put(更新),delete(刪除))。
什么是RESTful
基於REST構建的API就是Restful風格。
http vs 高性能二進制協議
http相對更規范,更標准,更通用,無論哪種語言都支持http協議。如果你是對外開放API,例如開放平台,外部的編程語言多種多樣,你無法拒絕對每種語言的支持,相應的,如果采用http,無疑在你實現SDK之前,支持了所有語言,所以,現在開源中間件,基本最先支持的幾個協議都包含RESTful。
RPC協議性能要高的多,例如Protobuf、Thrift、Kyro等,(如果算上序列化)吞吐量大概能達到http的二倍。響應時間也更為出色。千萬不要小看這點性能損耗,公認的,微服務做的比較好的,例如,netflix、阿里,曾經都傳出過為了提升性能而合並服務。如果是交付型的項目,性能更為重要,因為你賣給客戶往往靠的就是性能上微弱的優勢。
RESTful的規范到底是不是雞肋?
我認為,微服務的盛行,開放平台的盛行,的確讓RESTful過於“流行”了。你可以看看,無論是Google、Amazon、netflix(據說很可能轉向grpc),還是阿里,實際上內部都是采用性能更高的RPC方式。而對外開放的才是RESTful。
如果你的應用非常簡單,無論用哪種都無所謂了,基本都能滿足要求。
關於無狀態、冪等
這個跟你是否采用RESTful無關,主要還是看接口內部實現,所以,把這個作為RESTful優點的可以閉嘴了。
安全性
顯然,基於Http更安全一些,默認80端口,防火牆友好。
RESTful也分為嚴格的和自由的
RESTful還有個好處是制定了一系列規范,但是大多數使用者都是自由風格的,根本不是嚴格按照RESTful規范實現。當然存在就是道理,這樣做更高效,但是不夠通用。
無疑,嚴格按照資源抽象,API看起來更清晰,更容易被大家理解。同時,開發人員的復雜度也更高。
最后建議
對外開放給全世界的API推薦采用RESTful,是否嚴格按照規范是一個要權衡的問題。要綜合成本、穩定性、易用性、業務場景等等多種因素。
內部調用推薦采用RPC方式。當然不能一概而論,還要看具體的業務場景。
另外一個因素是人,關鍵是你有什么人,postgresql、mysql都有用的不錯的,遷來遷去,關鍵是你的人對哪個更熟悉。
不能為了用RESTful而用RESTful。
RPC的思想是把本地函數映射到API,也就是說一個API對應的是一個function,我本地有一個getAllUsers,遠程也能通過某種約定的協議來調用這個getAllUsers。至於這個協議是Socket、是HTTP還是別的什么並不重要;
RPC中的主體都是動作,是個動詞,表示我要做什么。
而REST則不然,它的URL主體是資源,是個名詞。而且也僅支持HTTP協議,規定了使用HTTP Method表達本次要做的動作,類型一般也不超過那四五種。這些動作表達了對資源僅有的幾種轉化方式。
https://www.zhihu.com/question/28570307