4. 请求对象

最后更新于:2022-04-01 01:20:05

发送一个请求对象至服务端代表一个rpc调用, 一个请求对象包含下列成员: **jsonrpc** > 指定JSON-RPC协议版本的字符串,必须准确写为“2.0” **method** > 包含所要调用方法名称的字符串,以rpc开头的方法名,用英文句号(U+002E or ASCII 46)连接的为预留给rpc内部的方法名及扩展名,且不能在其他地方使用。 **params** > 调用方法所需要的结构化参数值,该成员参数可以被省略。 **id** > 已建立客户端的唯一标识id,值必须包含一个字符串、数值或NULL空值。如果不包含该成员则被认定为是一个通知。该值一般不为NULL [[1]](http://wiki.geekdream.com/Specification/json-rpc_2.0.html#id1),若为数值则不应该包含小数 [[2]](http://wiki.geekdream.com/Specification/json-rpc_2.0.html#id2)。 服务端必须回答相同的值如果包含在响应对象。 这个成员用来两个对象之间的关联上下文。 [1] 在请求对象中不建议使用NULL作为id值,因为该规范将使用空值认定为未知id的请求。另外,由于JSON-RPC 1.0 的通知使用了空值,这可能引起处理上的混淆。 [2] 使用小数是不确定性的,因为许多十进制小数不能精准的表达为二进制小数。 ## 4.1 通知 没有包含“id”成员的请求对象为通知, 作为通知的请求对象表明客户端对相应的响应对象并不感兴趣,本身也没有响应对象需要返回给客户端。服务端必须不回复一个通知,包含那些批量请求中的。 由于通知没有返回的响应对象,所以通知不确定是否被定义。同样,客户端不会意识到任何错误(例如参数缺省,内部错误)。 ## 4.2 参数结构 rpc调用如果存在参数则必须为基本类型或结构化类型的参数值,要么为索引数组,要么为关联数组对象。 * 索引:参数必须为数组,并包含与服务端预期顺序一致的参数值。 * 关联名称:参数必须为对象,并包含与服务端相匹配的参数成员名称。没有在预期中的成员名称可能会引起错误。名称必须完全匹配,包括方法的预期参数名以及大小写。
';