JSON-RPC 简介

  • https://www.jsonrpc.org/

1. JSON-RPC 是什么?

  • JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种基于 JSON 的远程过程调用(RPC)协议,支持请求-响应模式和单向通知模式,适用于客户端-服务器通信。

2. 主要特点

  • 轻量级:使用 JSON 作为数据格式,易于解析和传输。

  • 无状态:通常不依赖于服务器的会话状态。

  • 跨语言:适用于 Python、JavaScript、Go、Rust 等各种编程语言。

  • 双向通信:支持双向调用(如 WebSocket 双向通信)。

  • 批量请求:支持多个请求合并为一个 JSON 数组,提高效率。

3. 基本结构

3.1 请求格式

{
  "jsonrpc": "2.0",
  "method": "subtract",
  "params": [42, 23],
  "id": 1
}
  • jsonrpc:版本号(目前为 "2.0")。

  • method:要调用的远程方法名称。

  • params:方法参数(可以是数组或对象)。

  • id:请求 ID(用于匹配响应)。

3.2 响应格式

{
  "jsonrpc": "2.0",
  "result": 19,
  "id": 1
}
  • result:方法的返回值。

  • id:对应请求的 ID。

3.3 错误响应

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}
  • error.code:标准错误码,如 -32601(方法未找到)。

  • error.message:错误描述。

4. 通信方式

  • HTTP/HTTPS:通过 POST 发送 JSON 请求。

  • WebSocket:支持全双工通信,可实现实时交互。

  • TCP/IPC:适用于高性能应用。

5. Python 示例

import requests
import json

url = "http://localhost:4000/jsonrpc"
headers = {"Content-Type": "application/json"}
data = {
    "jsonrpc": "2.0",
    "method": "add",
    "params": [5, 3],
    "id": 1
}

response = requests.post(url, data=json.dumps(data), headers=headers)
print(response.json())

7. 总结

JSON-RPC 提供了一种简单高效的远程调用机制,适用于跨语言、轻量级 RPC 需求,尤其适合 Web 服务、区块链等场景。