JSON RPC 2.0:请求对象上的额外字段是否违反规范?

时间:2019-03-09 17:51:50

标签: json rpc specifications json-rpc

我正在编写一个符合JSON RPC的js库。规范是否允许客户沿着headers字段向params对象添加自定义字段(例如Request)?

例如

{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "headers": { "original-client": 12 }, "id": 1}

规范(https://www.jsonrpc.org/specification#request_object)没有提及有关添加其他字段的任何内容。

如果我的图书馆确实添加了header字段,是否违反规范?

1 个答案:

答案 0 :(得分:1)

这里有同样的问题。 (我要添加用户身份验证信息/消息签名...)

您说对了,Specification没有提及任何其他字段。因此,从法律上讲,如果不禁止使用,则可以使用。

另一方面,我在这里找到了至少一个参考实现:www.simple-is-better.org/rpc/jsonrpc.py,如果解码后的消息包含多余的字段,它将为您带来异常。该代码来自JSON-RPC 2.0规范的一位作者RolandKöbler。

YMMV。

  • 如果您的图书馆只是专有系统的内部构件,请继续。
  • 如果您需要与其他JSON-RPC实现接口,请对每个实现进行测试。
  • 如果该库供公众使用,请不要这样做。

编辑:我使用以下协议解决了此问题:

  • 在“有效载荷”消息之前,使用方法"rpc.secinfo"发送符合标准的通知。 (rpc.前缀是按规范保留的扩展名)
  • "params"字段包含任何适用的元数据(例如,用户名,签名)
  • 示例:{"jsonrpc": "2.0", "method": "rpc.secinfo", "params": {"user":"root", "signature":"0xDEADBEEF"}}<DELIM><payload><DELIM>
  • 如果标头数据为空,则不会假装任何特殊方法(即行为与标准json-rpc完全一样)。

接收方可以像其他任何呼叫一样解码标头消息,只需要将标头应用于(检查sig,无论如何)标头即可。

讨论:

  • 允许在不触摸有效载荷的情况下进行构图
  • 允许解码报头而不解码有效载荷
  • 允许按原样使用字节有效负载,特别是允许加密+文字有效负载共存(但是加密有效负载会破坏JSON-RPC兼容性!)
  • “ Unaware”接收器:将无声或大声地丢弃rpc.secinfo呼叫,但可以操作。缺少ID表示一条通知,即接收方不会按照JSON-RPC规范发送回响应。
  • “ Unaware”发件人:收到的消息是有效的无标题消息。

随时可以重用此协议,但请将此SO答案归功于