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调用如果存在参数则必须为基本类型或结构化类型的参数值,要么为索引数组,要么为关联数组对象。
* 索引:参数必须为数组,并包含与服务端预期顺序一致的参数值。
* 关联名称:参数必须为对象,并包含与服务端相匹配的参数成员名称。没有在预期中的成员名称可能会引起错误。名称必须完全匹配,包括方法的预期参数名以及大小写。