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

相关推荐
代码小学僧17 小时前
从 0 到 1,记录我的第一个出海 SaaS 独立开发项目
前端·rpc·音视频开发
K成长日志17 小时前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_1 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
那年窗外下的雪.2 天前
AIDC 学习日志|第 27 天|EVPN 多归属收敛时间线与 Leaf2 接管验证
网络协议·学习·http·tcpdump
j7~2 天前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
天若有情6732 天前
独立开发复盘:我用 Node.js 做了个在线工具箱
前端·json·工具
小则又沐风a2 天前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp
captain3762 天前
网络原理(9)-数据链路层
java·网络协议·java-ee
Asurplus2 天前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
代码中介商2 天前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s