# JSON-RPC 简介

URL: https://caijiao.org/go/08-advanced/04-json-rpc
Source: docs/go/08-advanced/04-json-rpc.md
Description: 本节介绍 JSON-RPC 协议的基本概念、消息格式与常见应用场景，帮助读者理解其在远程调用中的作用。

## 1. 什么是 JSON-RPC

JSON-RPC 是一种基于 JSON 格式的远程过程调用（RPC）协议。它是一种轻量级、无状态的通信协议，支持双向通信，常用于客户端与服务端之间的数据交换。

特点：

- 简单、易于实现
- 使用 JSON 格式作为数据编码
- 与 HTTP、WebSocket 等传输协议兼容

## 2. 消息结构

一个标准的 JSON-RPC 请求格式如下：

```json
{
  "jsonrpc": "2.0",
  "method": "add",
  "params": [1, 2],
  "id": 1
}
```

- `jsonrpc`: 协议版本，固定为 "2.0"
- `method`: 调用的方法名
- `params`: 方法参数（数组或对象）
- `id`: 标识本次请求（可用于匹配响应）

响应格式示例：

```json
{
  "jsonrpc": "2.0",
  "result": 3,
  "id": 1
}
```

如果发生错误，响应将包含 `error` 字段：

```json
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}
```

## 3. 传输方式

虽然 JSON-RPC 本身不依赖于任何传输协议，但常见实现使用：

- HTTP POST
- WebSocket
- TCP 直连

## 4. 适用场景

- 前后端通信
- 浏览器插件与宿主通信
- 轻量级服务之间的调用

## 5. Go 中使用 JSON-RPC

Go 提供 `net/rpc/jsonrpc` 标准包支持 JSON-RPC（基于 TCP）：

```go
import "net/rpc/jsonrpc"
```

也可以使用第三方库如 `github.com/ybbus/jsonrpc` 实现 HTTP 传输支持。

---

JSON-RPC 是一种轻量、易实现的远程调用协议，适用于需要快速集成和跨语言支持的场景。
