JSON-RPC 快速開始

文章目錄

    • 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端素材】推薦優質數據統計后臺管理系統網頁Cleopatra.平臺模板(附源碼)

一、需求分析 在線后臺管理系統是指供管理員或運營人員使用的Web應用程序,用于管理和監控網站、應用程序或系統的運行和數據。它通常包括一系列工具和功能,用于管理用戶、內容、權限、數據等。下面是關于在線后臺管理系統的詳細分析: 1、功…

ssh簡介以及 windows 安裝ssh教程

SSH(Secure Shell)是一種網絡協議,用于計算機之間的加密登錄和其他安全網絡服務。通過 SSH,用戶可以安全地訪問遠程計算機,執行命令、傳輸文件等操作。SSH 使用公鑰加密技術,確保數據傳輸的安全性。本文將從…

TypeScript 哲學 - 2、Narrowing

四種類型守衛 1、truthiness narrowing 2、 3、 4、 control flow analysis

C語言:結構體(自定義類型)知識點(包括結構體內存對齊的熱門知識點)

和黛玉學編程呀,大家一起努力呀............. 結構體類型的聲明 回顧一下 struct tag { member-list; }variable-list; 創建和初始化 我們知道,在C語言中,對于一些數據是必須初始化的,但是結構體怎么創建并且初始化呢&#xff1…

【計算機網絡】TCP 如何實現可靠傳輸

TCP通過三次握手建立連接,四次揮手釋放連接,確保連接建立和連接釋放的可靠。 序列號、檢驗和、確認應答信號、重發機制、連接管理、窗口控制、流量控制、擁塞控制 標準回答 可靠傳輸就是通過TCP連接傳送的數據是沒有差錯、不會丟失、不重復并且按序到達的…

springboot+vue+mysql項目使用的常用注解

實體類常用注解 Data Data 是一個 Lombok 提供的注解&#xff0c;使用 Data 注解可以簡化代碼&#xff0c;使代碼更加簡潔易讀。 作用&#xff1a;自動為類生成常用的方法&#xff0c;包括 getter、setter、equals、hashCode 和 toString 等需要加Lombok的依賴 <depende…

rk3568-一種基于wifi的網絡環境搭建方案

前言&#xff1a; PC--Ubuntu--開發板 三者之間的網絡互相ping通很重要&#xff0c;尤其是ubuntu和開發板互ping成功最關鍵&#xff0c;關系到nfs&#xff0c;tftp等常用的開發手段。現在大多數開發板都帶有wifi芯片&#xff0c;現在提供一種方案可以三個設備無線地搭建網絡環境…

Open3D0.14.1編譯、安裝、demo使用教程

寫在前面 本文內容 Open3D在0.15版之前&#xff0c;沒有提供編譯好的包&#xff0c;要使用C版本必須自己編譯&#xff0c;本文是Open3D0.14.1在Windows下和Linux(Ubuntu1804)下的編譯、使用教程&#xff1b; Open3D其他版本的編譯和使用相關教程見 各個版本的Open3D、PCL的編譯…

STL常見容器(map/multimap容器)---C++

STL常見容器目錄&#xff1a; 8.map/ multimap容器8.1 map基本概念8.2 map構造和賦值8.3 map大小和交換8.4 map插入和刪除8.5 map查找和統計8.6 map容器排序8.6.1 內置類型排序8.6.2 自定義類型排序8.6.3 自定義和內置類型混合排序 8.map/ multimap容器 兩者基本一致&#xff…

用node寫后端環境運行時報錯Port 3000 is already in use

解決方法:關閉之前運行的3000端口,操作如下 1.WindowR輸入cmd確定,打開命令面板 2.查看本機端口詳情 netstat -ano|findstr "3000" 3.清除3000端口 taskkill -pid 41640 -f 最后再重新npm start即可,這里要看你自己項目中package.joson的啟動命令是什…

Flink:動態表 / 時態表 / 版本表 / 普通表 概念區別澄清

博主歷時三年精心創作的《大數據平臺架構與原型實現&#xff1a;數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行&#xff0c;點擊《重磅推薦&#xff1a;建大數據平臺太難了&#xff01;給我發個工程原型吧&#xff01;》了解圖書詳情&#xff0c;…

Python+PySide6實現一個選擇文件并做處理的GUI辦公小工具(完整代碼)

目錄 專欄導讀背景安裝注意事項完整代碼結尾專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——>Python辦公自動化專欄求訂閱 ?? 此外還…

天翼云登錄參數JavaSrcipt逆向

天翼云登錄參數 password 、comParam_curTime、comParam_seqCode、comParam_signature JavaSrcipt逆向 目標網站 https://m.ctyun.cn/wap/main/auth/login?redirect/my 目標參數 要逆向的有 password、comParam_curTime、comParam_seqCode、comParam_signature 四個參數 …

安卓使用ExoPlayer出現膨脹類異常

1.導包 implementation com.google.android.exoplayer:exoplayer-core:2.15.1implementation com.google.android.exoplayer:exoplayer-ui:2.15.1 2.在Androidifest.xml加入權限&#xff0c;我這里加了忘了與讀寫權限 <uses-permission android:name"android.permissio…

【Fastadmin/ThinkPHP5】使用Queue隊列方法詳細步驟

在現代應用開發中&#xff0c;合理利用隊列系統能夠有效提升系統的性能和響應速度&#xff0c;尤其是在處理耗時較長的任務時&#xff0c;如發送大量郵件、執行定時任務等。下面是如何在ThinkPHP框架中設置和使用隊列功能的詳細指南&#xff1a; 1.配置隊列服務 在applicatio…

Tomcat服務部署、優化

一 Tomcat的基本介紹 Tomcat概念 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試 JSP 程序的首選。 當在一臺機器上配置好Apache 服務器…

VMwareWorkstation17.0虛擬機搭建WindowsXP虛擬機(完整安裝步驟詳細圖文教程)

VMwareWorkstation17.0虛擬機搭建WindowsXP虛擬機&#xff08;完整安裝步驟詳細圖文教程&#xff09; 一、Windows XP1.Windows XP簡介2.Windows XP 的下載地址 二、配置 Windows XP 虛擬機運行環境1.新建虛擬機2.選擇類型配置3.插入WinXP光盤映像文件(ISO)4.選擇操作系統5.命名…

Home Assistant:基于Python的智能家居開源系統詳解

Home Assistant&#xff1a;基于Python的智能家居開源系統詳解 在數字化和智能化的時代&#xff0c;智能家居系統成為了現代家庭的新寵。它們能夠讓我們更加方便地控制家中的各種設備&#xff0c;實現自動化和個性化的居住體驗。其中&#xff0c;Home Assistant作為一款基于Pyt…

美易官方:3月1日美股成交額前20

3月1日&#xff0c;美股市場熱鬧非凡&#xff0c;成交額前20的公司股票交易活躍&#xff0c;其中&#xff0c;英偉達&#xff08;NVIDIA&#xff09;的股價收在800美元之上&#xff0c;創下了歷史新高。這一天的股市走勢充分展示了投資者對于科技股的熱烈追捧&#xff0c;同時也…

手機NFC錄入門禁數據,實現手機開門

近場通信&#xff08;Near Field Communication&#xff0c;簡稱NFC&#xff09;&#xff1a; 是一種新興的技術&#xff0c;使用了NFC技術的設備&#xff08;例如移動電話&#xff09;可以在彼此靠近的情況下進行數據交換&#xff0c;是由非接觸式射頻識別&#xff08;RFID&am…