JSON-RPC 2.0

JSON-RPC 2.0 是一种基于 JSON 数据格式的远程过程调用协议(Remote Procedure Call Protocol,RPC)。简单来说,它允许一个程序通过网络请求另一个程序执行某个"函数",然后返回结果。

你可以把它理解成:

"通过发送一段 JSON,让远程服务器帮你执行一个方法。"

它常用于区块链节点通信、钱包接口、微服务、后台 API 等场景。


1. RPC 是什么?

RPC 的核心思想是:

传统调用:

python 复制代码
result = calculate(1, 2)

你的程序直接调用本地函数。

RPC:

复制代码
客户端  ----请求---->  服务器

"请帮我执行 calculate(1,2)"

客户端  <----返回----  

"结果是3"

调用者感觉像调用本地函数,但实际上函数运行在另一台机器上。


2. JSON-RPC 2.0 的基本结构

一次请求通常长这样:

json 复制代码
{
  "jsonrpc": "2.0",
  "method": "subtract",
  "params": [42, 23],
  "id": 1
}

字段解释:

字段 作用
jsonrpc 协议版本,固定写 "2.0"
method 要调用的方法名
params 传递给方法的参数
id 请求编号,用于匹配响应

比如:

意思是:

请服务器执行 subtract(42,23)


服务器返回:

json 复制代码
{
  "jsonrpc": "2.0",
  "result": 19,
  "id": 1
}

表示:

执行成功,结果是 19


3. 如果出错呢?

例如调用不存在的方法:

请求:

json 复制代码
{
  "jsonrpc": "2.0",
  "method": "hello",
  "id": 1
}

返回:

json 复制代码
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}

错误结构:

json 复制代码
error:
{
    code,
    message,
    data
}

4. JSON-RPC 和 REST API 的区别

很多 Web API 使用 REST:

例如:

复制代码
GET /users/123

意思:

获取用户123

JSON-RPC:

json 复制代码
{
 "jsonrpc":"2.0",
 "method":"getUser",
 "params":[123],
 "id":1
}

意思:

调用 getUser 方法

区别:

REST JSON-RPC
思想 资源操作 调用函数
路径 多个 URL 通常一个接口
方式 GET/POST/PUT POST为主
格式 多种 JSON
风格 HTTP 风格 类似本地函数调用

5. 为什么区块链喜欢 JSON-RPC?

很多区块链节点都会提供 JSON-RPC 接口。

例如:

Ethereum 节点:

请求:

json 复制代码
{
 "jsonrpc":"2.0",
 "method":"eth_blockNumber",
 "params":[],
 "id":1
}

意思:

告诉我当前区块高度

返回:

json 复制代码
{
 "jsonrpc":"2.0",
 "result":"0x10d4f",
 "id":1
}

钱包、交易所、区块浏览器都可以通过 JSON-RPC 与节点通信。


6. JSON-RPC 2.0 的特点

① 轻量

没有复杂协议头:

json 复制代码
{
 "method":"login"
}

比 SOAP 等协议简单很多。


② 与语言无关

服务器可以:

  • Python
  • Java
  • Go
  • C++
  • JavaScript

客户端不用关心。

例如:

Python 客户端:

python 复制代码
request = {
    "jsonrpc":"2.0",
    "method":"add",
    "params":[1,2],
    "id":1
}

Go 服务端也能处理。


③ 支持批量请求

一次调用多个方法:

json 复制代码
[
 {
  "jsonrpc":"2.0",
  "method":"getUser",
  "id":1
 },
 {
  "jsonrpc":"2.0",
  "method":"getBalance",
  "id":2
 }
]

服务器返回:

json 复制代码
[
 {
  "result":"Tom",
  "id":1
 },
 {
  "result":100,
  "id":2
 }
]

7. JSON-RPC 2.0 的典型应用

区块链

  • 钱包 ↔ 节点
  • 交易所 ↔ 节点
  • DApp ↔ 区块链

例如:

  • Ethereum JSON-RPC
  • Bitcoin Core RPC

微服务

内部服务:

复制代码
订单服务

   |
JSON-RPC

   |

支付服务

远程控制

例如:

  • 游戏服务器
  • 自动化系统
  • 云服务管理

8. 一个简单理解

如果 REST 像:

"请给我这个资源"

那么 JSON-RPC 像:

"请帮我执行这个动作"

REST:

复制代码
GET /balance/user123

JSON-RPC:

json 复制代码
{
 "method":"getBalance",
 "params":["user123"]
}

如果你之前关注过 Telegram 加密通信、区块链接口、钱包安全 这些方向,那么 JSON-RPC 很值得掌握,因为很多钱包和节点之间的通信,本质上就是靠 JSON-RPC 完成的。

相关推荐
AI备忘录36 分钟前
(二十五)华为华三锐捷迈普思科 ERPS 环网保护配置命令(G.8032 五厂商对照)
运维·服务器·网络·网络协议·华为
Dxy12393102161 小时前
MySQL JSON 生成列索引原理、实战与坑点
mysql·adb·json
事圆则缓1 小时前
HTTP 请求是怎么走的:从 Android 页面到服务端响应
android·网络协议·http
0+1111 小时前
Linux --HTTPS协议原理
网络协议·http·https
hellojackjiang20111 小时前
IM聊天不掉线?生产级WebSocket断线重连、心跳保活实战
websocket·网络协议·网络编程·html5·即时通讯·im
码上上班2 小时前
HTTP知识点
网络·网络协议·http
无线图传-HDMI视频延长传输2 小时前
AM8962DT/AM8962DR:4K60 ProAV over IP 芯片方案,35ms 超低延迟 + 过交换机一对多+KVM 透传
网络·网络协议·tcp/ip
0+1112 小时前
Linux --HTTP Cookie 与 Session
网络·网络协议·http
牛战士coding2 小时前
如何让 Claude Desktop 与 Cursor 调用订单工具?MCP Streamable HTTP 接入思路
网络·网络协议·http
硅基造物主3 小时前
18.从 IP 到 MQTT:STM32 用 AT 指令驱动 ESP-12F 上云的完整链路(含全套实战代码 + 踩坑清单)
网络·stm32·单片机·嵌入式硬件·网络协议·tcp/ip