跳转到内容

JSON-RPC 接口

XIDL 的 JSON-RPC 家族覆盖:

  1. 普通 JSON-RPC 请求/响应映射
  2. JSON-RPC Stream
  3. 运行时层面的安全与部署约定

最常见的输出目标是:

  • rust-jsonrpc
  • openrpc

JSON-RPC 方法名由模块、接口和操作名组合而来。

module math {
interface Calc {
long add(in long a, in long b);
};
};

这个方法会映射成:

math.Calc.add

实践上可以这样理解:

  • 请求 params 是一个对象
  • ininout 参数出现在请求侧
  • 返回值、outinout 出现在结果侧

示例:

interface SmartCityRpcApi {
string quoteTrip(
in string rider_id,
in string zone_id,
out long amount_cents,
out string currency
);
};

这会自然形成:

  • 一个请求参数对象
  • 一个结果对象

rust-jsonrpc 当前通常会生成:

  • 业务 trait
  • 服务端包装器
  • 客户端包装器
  • 每个方法的参数结构

openrpc 当前通常会生成:

  • openrpc.json

JSON-RPC Stream 在请求/响应模型上增加流式消息交换。

常见注解:

  • @server_stream
  • @client_stream
  • @bidi_stream

实践上需要知道:

  • 它比 HTTP Stream 更接近全双工模型
  • 传输层可以是 TCP、WebSocket 或其他运行时通道
  • 当前仓库已经支持相关概念,但这部分也偏实现驱动

当前仓库没有单独的 JSON-RPC 安全 RFC。

实际部署中,JSON-RPC 的安全通常由外围传输层决定,例如:

  • HTTP
  • WebSocket 握手
  • IPC 边界
  • 进程边界

所以你应该把 JSON-RPC 安全理解为“运行时和部署问题”,而不是这份 契约语言本身再发明一套独立认证协议。

  1. 用 IDL 定义接口和数据类型
  2. rust-jsonrpc 生成可运行绑定
  3. openrpc 生成 Schema
  4. 需要精确行为时再看 RFC