[具身智能-330]:JSON-RPC: 让客户端能够像调用本地函数一样,去调用远程服务器上的方法
JSON-RPC 2.0 是一种轻量级、无状态的远程过程调用RPC协议它使用JSON作为数据交换格式。其核心思想是让客户端能够像调用本地函数一样去调用远程服务器上的方法。 核心特性轻量简洁基于 JSON 格式数据结构简单易于人类阅读和机器解析。语言无关任何能够解析和生成 JSON 的编程语言如 Python, Java, Go, JavaScript 等都可以实现和使用它。传输无关协议本身不绑定任何传输方式可以运行在 HTTP、WebSocket、TCP 等多种传输层之上。无状态每次请求都是独立的服务器不会保存客户端的会话状态。 消息结构JSON-RPC 2.0 定义了三种核心消息对象请求、响应和错误。1. 请求对象 (Request Object)客户端通过发送一个请求对象来调用远程方法。字段类型必填说明jsonrpc字符串是协议版本必须是2.0。method字符串是要调用的远程方法(函数)名。以rpc.开头的方法名被协议保留。params数组/对象否传递给方法的参数。可以是按位置传值的数组或按名称传值的对象。id字符串/数字/空否用于标识请求的唯一ID以便与响应匹配。如果省略id则此请求为通知服务器不应回复。请求示例json{ jsonrpc: 2.0, method: subtract, params: [42, 23], id: 1 }2. 响应对象 (Response Object)服务器处理请求后会返回一个响应对象。表格字段类型说明jsonrpc字符串协议版本必须是2.0。result任意类型方法执行成功时的返回结果。如果失败此字段不存在。error对象方法执行失败时的错误信息。如果成功此字段不存在。id字符串/数字/空必须与请求中的id值完全相同。成功响应示例json{ jsonrpc: 2.0, result: 19, id: 1 }3. 错误对象 (Error Object)当请求失败时error字段会包含一个错误对象。表格字段类型说明code整数预定义的错误码。message字符串对错误的简短描述。data任意类型可选的附加错误信息如堆栈跟踪。失败响应示例json{ jsonrpc: 2.0, error: { code: -32601, message: Method not found }, id: 1 } 通信模式JSON-RPC 2.0 支持多种灵活的通信模式单次调用客户端发送一个带id的请求服务器返回一个对应的响应。这是最常见的 1:1 调用模式。通知客户端发送一个不带id的请求。服务器处理该请求但不返回任何响应适用于日志记录、事件触发等无需回应的场景。批量调用客户端可以在一个 HTTP 请求中发送一个包含多个请求对象的数组。服务器处理后会返回一个包含对应响应对象的数组。 标准错误码协议定义了一组标准的错误码用于标识常见的错误类型错误码含义-32700解析错误 (收到的数据不是有效的 JSON)-32600无效请求 (JSON 结构不符合 RPC 规范)-32601方法未找到 (请求的方法不存在)-32602无效参数 (传递的参数不正确)-32603内部错误 (服务器内部发生未知错误)此外-32000到-32099的范围保留给服务器端自定义错误使用。 应用场景与优势JSON-RPC 2.0 因其简洁和高效被广泛应用于微服务通信作为服务间轻量级的内部通信协议。Web API作为 RESTful API 的一种替代尤其适合语义为“过程调用”的接口。AI 领域在模型上下文协议MCP、智能体间通信A2A等新兴 AI 协议中JSON-RPC 2.0 因其跨语言、易实现的特性而被选为底层通信框架。与其他技术相比与 REST 对比JSON-RPC 的“方法调用”语义更明确而 REST 更侧重于“资源操作”。与 gRPC 对比JSON-RPC 更轻量无需代码生成但性能和类型安全性不如 gRPC。