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

你可以把它理解成:

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

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


1. RPC 是什么?

RPC 的核心思想是:

传统调用:

result = calculate(1, 2)

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

RPC:

客户端  ----请求---->  服务器

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

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

"结果是3"

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


2. JSON-RPC 2.0 的基本结构

一次请求通常长这样:

{
  "jsonrpc": "2.0",
  "method": "subtract",
  "params": [42, 23],
  "id": 1
}

字段解释:

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

比如:

意思是:

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


服务器返回:

{
  "jsonrpc": "2.0",
  "result": 19,
  "id": 1
}

表示:

执行成功,结果是 19


3. 如果出错呢?

例如调用不存在的方法:

请求:

{
  "jsonrpc": "2.0",
  "method": "hello",
  "id": 1
}

返回:

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}

错误结构:

error:
{
    code,
    message,
    data
}

4. JSON-RPC 和 REST API 的区别

很多 Web API 使用 REST:

例如:

GET /users/123

意思:

获取用户123

JSON-RPC:

{
 "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 节点:

请求:

{
 "jsonrpc":"2.0",
 "method":"eth_blockNumber",
 "params":[],
 "id":1
}

意思:

告诉我当前区块高度

返回:

{
 "jsonrpc":"2.0",
 "result":"0x10d4f",
 "id":1
}

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


6. JSON-RPC 2.0 的特点

① 轻量

没有复杂协议头:

{
 "method":"login"
}

比 SOAP 等协议简单很多。


② 与语言无关

服务器可以:

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

客户端不用关心。

例如:

Python 客户端:

request = {
    "jsonrpc":"2.0",
    "method":"add",
    "params":[1,2],
    "id":1
}

Go 服务端也能处理。


③ 支持批量请求

一次调用多个方法:

[
 {
  "jsonrpc":"2.0",
  "method":"getUser",
  "id":1
 },
 {
  "jsonrpc":"2.0",
  "method":"getBalance",
  "id":2
 }
]

服务器返回:

[
 {
  "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:

{
 "method":"getBalance",
 "params":["user123"]
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐