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 完成的。