文章目錄
- JSON-RPC
- 什么是JSON-RPC
- JSON-RPC java開源實現
- JSON-PRC go開源實現
- JSON-RPC 和 Restful 都屬于什么?
- RPC、JSON-RPC和HTTP區別
- 以太坊使用json-rpc?
- JSON-RPC和gRPC
- WEB開發中,使用JSON-RPC好,還是RESTful API好?
JSON-RPC
官網: https://www.jsonrpc.org/
(譯) JSON-RPC 2.0 規范(中文版): https://www.w3cschool.cn/ycuott/z7er3ozt.html
什么是JSON-RPC
JSON是一種輕量級的數據交換格式,它可以表示數值、字符串、序列及名/值對集合。
JSON-RPC是一種無狀態的,輕量級的遠程程序調用協議。叫 JSON 的原因是因為返回值是 JSON。
JSON-RPC協議中的客戶端一般是為了向遠程系統請求執行某個方法。客戶端向實現了JSON-RPC協議的服務端發送請求,多個輸入參數能夠通過數組或者對象傳遞到遠程方法,這個遠程方法也能返回多個輸出數據,具體是什么,當然要看具體的方法實現。
所有的傳輸都是單個對象,用JSON格式進行序列化。請求包含三個特定屬性:
- method,方法,是等待調用的遠程方法名,字符串類型
- params,參數,對象類型或者是數組,向遠程方法傳遞的多個參數值
- id,任意類型值,用于和最后的響應進行匹配,也就是這里設定多少,后面響應里這個值也設定為相同的
demo:
curl -X POST \-H "Content-Type: application/json" \--data '{ "jsonrpc": "2.0", "method": "Filecoin.ChainHead", "params": [], "id": 3 }' \'http://127.0.0.1:1234/rpc/v0'
響應的接收者必須能夠給出所有請求以正確的響應。響應也有三個屬性:
- result,結果,是方法的返回值,如果方法執行時出現了錯誤,那么這個值必須為空
- error,錯誤,當出現錯誤時,返回一個特定的錯誤編碼,沒有錯誤就為空值
- id,就是請求帶的那個id值,用于匹配
需要注意到,有一些場景下,是不用返回值的,比如只對客戶端進行通知,由于不用對請求的id進行匹配,所以這個id就是不必要的,置空或者直接不要了。
總結:JSON-RPC比較符合直觀,格式也相對寬松;RESTFUL太死板、SOAP太麻煩,那就是JSON RPC
JSON-RPC java開源實現
官網:https://github.com/briandilley/jsonrpc4j
JSON-PRC go開源實現
使用json-prc的一個小demo:
https://github.com/shepf/star-tools
JSON-RPC 和 Restful 都屬于什么?
答:都屬于 Web Service 模型,該模型用于幫助人們解決應用程序與服務器傳遞數據的問題。
而基于該模型的解決方案大體上有三類,即:
- SOA 模型(面向消息)
- RPC 模型(面向方法)
- REST 模型(面向資源)其中 RPC 模型,又分成三類:
XML-RPC
JSON-RPC
SOAP + WSDL [SOAP 本質上是 XML-RPC 的升級版]
已經沒有人用 SOA 模型解決問題了。
接著我們再了解一點,那就是 RPC 模型的這三種解決方案,現在還有人用的,也只剩下 JSON-RPC 一種了。
總結: 目前主要使用 JSON-RPC 、REST。
RPC、JSON-RPC和HTTP區別
【基礎】RPC、JSON-RPC和HTTP區別
參考URL: https://blog.csdn.net/chenguolinblog/article/details/90607551
以太坊使用json-rpc?
在以太坊中,使用 JSON-RPC 協議可以與以太坊節點進行交互,例如發送交易、查詢區塊鏈數據、訂閱事件等操作。以太坊節點提供了一個 JSON-RPC 接口,客戶端可以通過發送符合以太坊 JSON-RPC 協議規范的請求來與節點進行通信。
在具體實現方面,以太坊節點使用了不同的 JSON-RPC 庫或框架來實現 JSON-RPC 協議。最常用的是 Go 語言實現的 Geth 節點,它使用自己的 JSON-RPC 實現。此外,還有其他以太坊客戶端,如 Parity、OpenEthereum,它們也使用自己的 JSON-RPC 實現。此外,還有一些第三方的 JSON-RPC 庫可供使用,如 web3.js 和 web3.py,它們提供了對以太坊 JSON-RPC 接口的封裝和更易于使用的 API。
總結:以太坊使用 JSON-RPC 協議作為與以太坊節點進行通信的標準協議,具體的 JSON-RPC 實現取決于所使用的以太坊客戶端或第三方庫。
JSON-RPC和gRPC
JSON-RPC和gRPC都是遠程過程調用(RPC)框架,但它們在底層技術、數據序列化格式和使用場景上有所不同。在構建區塊鏈時,選擇JSON-RPC還是gRPC取決于幾個因素。
-
JSON-RPC:
JSON-RPC是一種輕量級的RPC協議,使用JSON(JavaScript對象表示法)進行數據序列化。
它簡單易懂,廣泛支持各種編程語言。
JSON-RPC通常在HTTP或WebSocket上實現,適用于基于Web的應用程序。它支持各種數據類型,并且可讀性強,這在開發和調試過程中非常有幫助。
JSON-RPC非常適合強調互操作性和易于實現的場景,而不是性能和效率。 -
gRPC:
gRPC是由Google開發的高性能RPC框架。它使用Protocol Buffers(protobuf)作為默認的數據序列化格式。
Protocol Buffers是一種二進制序列化格式,可以高效緊湊地表示結構化數據。
gRPC支持多種編程語言,并提供雙向流式傳輸、流量控制和身份驗證等功能。它使用HTTP/2作為傳輸協議,實現了高效的多路復用、頭部壓縮和服務器推送等特性。
gRPC非常適合強調性能、可擴展性和高效網絡通信的場景,例如微服務架構。
總結,選擇JSON-RPC還是gRPC取決于具體需求。如果注重互操作性和易用性,且對性能和效率要求不高,可以選擇JSON-RPC。如果注重性能、可擴展性和高效的網絡通信,尤其是在微服務架構等場景下,可以選擇gRPC。
WEB開發中,使用JSON-RPC好,還是RESTful API好?
WEB開發中,使用JSON-RPC好,還是RESTful API好?
參考URL: https://www.zhihu.com/question/28570307?sort=created