JSON-RPC 1.0 规范 和 JSON-RPC 2.0 规范 及示例

JSON-RPC 1.0 规范

JSON-RPC 1.0 是一种远程过程调用(RPC)协议,使用 JSON(JavaScript Object Notation)作为数据交换格式。下面是 JSON-RPC 1.0 的一些基本规范:

1. 请求格式:


- 必须是一个 JSON 对象。
- 必须包含以下字段:
- "method":表示要调用的方法名。
- "params":表示传递给方法的参数,可以是一个数组或对象。
- "id":表示请求的唯一标识符,可以是一个字符串、数值或 null。

2. 响应格式:


- 必须是一个 JSON 对象。
- 必须包含以下字段:
- "result":表示方法调用的结果,可以是任意类型。
- "error":表示方法调用的错误,如果没有错误则为 null。
- "id":与请求中的 id 字段相对应。

3. 错误处理:


- 如果方法调用成功,则 "error" 字段必须为 null。
- 如果方法调用失败,则 "result" 字段必须为 null,"error" 字段包含一个描述错误的对象,包括以下字段:
- "code":表示错误代码,通常是一个数值。
- "message":表示错误的描述信息,通常是一个字符串。
- "data":表示额外的错误数据,可以是任意类型。

4. 批量请求:


- 可以同时发送多个请求,以数组形式包含在一个 JSON 对象中。
- 每个请求都遵循上述请求格式。
- 响应也以数组形式包含在一个 JSON 对象中,与请求的顺序对应。

示例:

以下是一个示例,展示了符合 JSON-RPC 1.0 规范的请求和响应:

1. 请求示例:

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


2. 响应示例(成功):

 "result": 19,
  "error": null,
  "id": 1
}


3. 响应示例(错误):

 "result": null,
  "error": {
    "code": -32600,
    "message": "Invalid Request"
  },
  "id": 1
}


在这个示例中,请求包含了一个名为 "subtract" 的方法,参数为 [42, 23],并且请求的唯一标识符为 1。响应中的 "result" 字段表示方法调用的结果,如果成功则为结果值,如果失败则为 null。"error" 字段表示方法调用的错误,如果成功则为 null,如果失败则包含一个描述错误的对象,其中包含错误代码和错误消息。最后,"id" 字段与请求中的唯一标识符相对应,用于将响应与请求关联起来。

JSON-RPC 2.0 规范:

以下是 JSON-RPC 2.0 的规范:

1. 请求格式:


- 必须是一个 JSON 对象。
- 必须包含以下字段:
- "jsonrpc":表示 JSON-RPC 版本,必须为 "2.0"。
- "method":表示要调用的方法名。
- "params":表示传递给方法的参数,可以是一个数组或对象。
- "id":表示请求的唯一标识符,可以是一个字符串、数值或 null。

示例请求:

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


2. 响应格式:


- 必须是一个 JSON 对象。
- 必须包含以下字段:
- "jsonrpc":表示 JSON-RPC 版本,必须为 "2.0"。
- "result":表示方法调用的结果,可以是任意类型。
- "error":表示方法调用的错误,如果没有错误则为 null。
- "id":与请求中的 id 字段相对应。

示例响应(成功):

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


示例响应(错误):

 "jsonrpc": "2.0",
  "error": {
    "code": -32600,
    "message": "Invalid Request"
  },
  "id": 1
}


3. 错误处理:


- 如果方法调用成功,则 "error" 字段必须为 null。
- 如果方法调用失败,则 "result" 字段必须为 null,"error" 字段包含一个描述错误的对象,包括以下字段:
- "code":表示错误代码,通常是一个数值。
- "message":表示错误的描述信息,通常是一个字符串。
- "data":表示额外的错误数据,可以是任意类型。

4. 批量请求:


- 可以同时发送多个请求,以数组形式包含在一个 JSON 对象中。
- 每个请求都遵循上述请求格式。
- 响应也以数组形式包含在一个 JSON 对象中,与请求的顺序对应。

示例批量请求:

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


示例批量响应:

   "jsonrpc": "2.0",
    "result": 7,
    "id": "1"
  },
  {
    "jsonrpc": "2.0",
    "result": 19,
    "id": "2"
  }
]

GitHub 代码库:https://github.com/haywire/jsonrpc-c

 代码测试编译结果:

------------------------------------------
[2023-09-12 16:36:14.497]# SEND ASCII>
{"method":"sayHello"}

[2023-09-12 16:36:14.500]# RECV ASCII>
{
	"result":	"Hello!"
}
------------------------------------------ 
[2023-09-12 16:36:52.540]# SEND ASCII>
{"method":"exit"}

[2023-09-12 16:36:52.543]# RECV ASCII>
{
	"result":	"Bye!"
}
------------------------------------------

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值