电话:13485538018
关闭
您当前的位置:首页 > 职场资讯 > 面试秘籍

面试必问:JSON-RPC 是什么?一篇讲透核心要点

来源:网络整理 时间:2026-04-18 作者:佚名 浏览量:

本文字数:4000 字,阅读约需 15 分钟。

在分布式系统里头,不同的服务相互之间得用到一种可靠的办法去展开通信。远程过程调用,也就是RPC,它是一种常见的选取方式,而JSON - RPC则是处于其中相对简单的那一种。

这篇文章讲述 JSON-RPC 2.0 协议的重中之重,涵盖消息的格式,叙述错误的处理方式,还提及实际运用的场景之处。

JSON-RPC 概述什么是 JSON-RPC

json-rpc 是一种远程过程调用协议,它无状态,且轻量级,其使用 json 作为数据格式,它的设计目标在于简单,而协议规范仅有几页文档。

JSON身为数据交换格式,近乎所有主流编程语言都有不错的支持,涵盖JavaScript、Python、Java、C#、Go等,这致使JSON-RPC能够轻易达成跨语言调用。

协议自身并不与传输层相绑定,能够运行在诸如 HTTP、WebSocket、TCP Socket 等的各类消息传输环境之中。从事开发的人能够依据业务方面的需求去挑选适宜的传输方式。

JSON-RPC 的发展历程

JSON-RPC 有两个主要版本:1.0 和 2.0。

1.最早提出基于 JSON 的 RPC 概念的是 0 版本,然而其在规范性方面存在欠缺之处。2010 年发布的 2.0 版本进行了重要升级,该升级加入了批量调用支持以及统一的错误对象结构。两个版本借助 jsonrpc 字段予以区分。

JSON-RPC 的核心特点

JSON-RPC 有几个值得注意的特点:

协议规范详解协议约定与术语

JSON - RPC规范里用到了RFC 2119定义的关键字 ,这些关键字是MUST、MUST NOT、SHOULD、SHOULD NOT、MAY。这些术语阐述了实现者必须要遵循 ,或者应该遵循 ,又或者可以遵循的行为规范。

发出请求的那个实体,被称作客户端(Client),它专门对用于构造请求的对象予以负责,同时还要处理响应,就是这样。

服务端,也就是Server,它是这样一种实体,即接收请求,然后进行处理此请求行为,进而生成响应,最后再返回响应。

同一实现能够同时充当客户端以及服务端,举例而言,于对等网络里,两个节点有可能既针对对方发出请求,又回应源自对方的请求。

数据类型系统

JSON 的类型系统被 JSON-RPC 所继承,其中涵盖六种数据类型。

基础类别有,String也就是字符串,Number即数值,Boolean为布尔值,Null是空值。

结构化类型:Object(对象)、Array(数组)

这些种类名称的首字母,是一定要大写的,其中涵盖了True,还包括False。

若成员名称也就是字段名于客户端跟服务端彼此交互之际,必须对大小写予以区分。函数、方法、过程这三个术语能够相互替换使用,它们均指向能够被调用的可执行单元且。

消息格式深度解析

JSON-RPC 2.0界定了三种核心消息类型,其中有一种是请求对象,也就是Request Object,还有一种是响应对象,即Response Object,另外一种是通知对象,也就是Notification Object。

JSON-RPC 协议架构图请求对象结构

请求对象是客户端向服务端发起 RPC 调用的载体:

{
??"jsonrpc":?"2.0",
??"method":?"subtract",
??"params": [42,?23],
??"id":?1
}

// 索引数组参数:参数顺序与服务端预期一致
{"jsonrpc":?"2.0",?"method":?"subtract",?"params": [42,?23],?"id":?1}

// 命名对象参数:参数名需与服务端方法签名匹配
{"jsonrpc":?"2.0",?"method":?"subtract",?"params": {"minuend":?42,?"subtrahend":?23},?"id":?2}

响应对象结构

响应对象是服务端返回给客户端的执行结果:

// 成功响应
{
"jsonrpc":?"2.0",
"result":?19,
"id":?1
}

// 错误响应
{
"jsonrpc":?"2.0",
"error": {
? ??"code":?-32601,
? ??"message":?"Method not found",
? ??"data":?"详细错误信息"
? },
"id":?1
}

那响应对象呢,它得涵盖result或者error其中之一,可不能同时把这两者包含进来。而id呢,它必须得跟对应请求里头的id维持一致状态。

在请求自身存有错误的状况下,是那种像无效的 JSON 格式或者非法请求结构这样的错误,致使服务端没办法去确定原始 id 的时候,响应当中的 id 一定得是 null。

通知机制

通知是一种不需要响应的请求,通过省略?id?字段来标识:

{
??"jsonrpc":?"2.0",
??"method":?"update",
??"params": [1,?2,?3,?4,?5]
}

通知可应用于日志记录的场景,通知可应用于事件发布的场景,通知可应用于进度通知的场景。客户端仅仅负责发送消息,客户端不需要处理响应。

因不存在响应机制,客户端没法晓得通知是不是被成功处置。于批量请求里,通知请求不会生成相应的响应。

JSON-RPC 请求响应流程图错误处理机制错误对象结构

JSON-RPC 2.0 定义了标准化的错误对象:

{
??"code":?-32603,
??"message":?"Internal error",
??"data": {?"details":?"数据库连接失败"?}
}

预定义错误码

消息格式与错误处理_json面试_JSON-RPC 2.0 协议详解

JSON - RPC 2.0,在 -32768至 -32000这个范围之内,预留了预定义错误码:

错误码

名称

说明

-32700

Parse Error

解析错误,服务端收到的 JSON 格式无效

-32600

Invalid Request

无效请求,发送的不是有效的请求对象

-32601

Method Not Found

方法不存在或不可调用

-32602

Invalid Params

参数无效

-32603

Internal Error

JSON-RPC 内部错误

JSON-RPC 错误码分类图

范围处于 -32000 至 -32099 之内的错误码,被保留以供服务端自行定义使用。应用程序同样能够定义自身的错误码,(通常是负数并且其绝对值小于 32767)。

错误处理建议批量调用与性能优化批量请求机制

JSON - RPC 2.0具备在单个请求里发送多个RPC调用的能力,服务端会返回与之对应的响应数组,此一机制于高并发场景当中能够降低网络往返的次数。

// 批量请求
[
? {"jsonrpc":?"2.0",?"method":?"sum",?"params": [1,?2,?4],?"id":?"1"},
? {"jsonrpc":?"2.0",?"method":?"notify_hello",?"params": [7]},
? {"jsonrpc":?"2.0",?"method":?"subtract",?"params": [42,?23],?"id":?"2"},
? {"jsonrpc":?"2.0",?"method":?"get_data",?"id":?"9"}
]

对应的批量响应:

[
? {"jsonrpc":?"2.0",?"result":?7,?"id":?"1"},
? {"jsonrpc":?"2.0",?"result":?19,?"id":?"2"},
? {"jsonrpc":?"2.0",?"result": ["hello",?5],?"id":?"9"}
]

那种没有id字段的通知请求,是不会去产生响应的。响应数组当中各个元素的顺序,跟请求顺序是没有关联关系的,客户端是借助匹配id的方式,去关联请求以及响应的。

批量调用的边界情况

规范对批量调用中的边界情况有明确定义:

要是批量请求自身并非有效的 JSON,或者不是含有至少一个值的数组,那么服务端应当返回单对象响应,而并非数组。空数组是会被当作无效请求的。

要是批量请求里的全部请求均为通知,那服务端无需返回任何响应。在别的情形下,就算若干请求处理失败了,响应数组中仍然应当含有对应请求所产生的错误响应。

与 RESTful API 进行对比的性能优化策略的分析,设计理念存在差异。

JSON-RPC与RESTful体现出两种各异的API设计理念,JSON-RPC以过程为导向,所注重的是“做何种操作”,RESTful以资源为导向,所关注的是“操作哪些资源”。

以用户操作为例:

// JSON-RPC: 直接调用方法
{"jsonrpc":?"2.0",?"method":?"createUser",?"params": {"name":?"张三",?"email":?"zhang@example.com"},?"id":?1}

// RESTful: 操作资源
POST /users
{"name":?"张三",?"email":?"zhang@example.com"}

通信模式对比

维度

JSON-RPC

RESTful

语义抽象

方法调用

资源操作

URL 角色

微信扫一扫分享资讯
相关推荐
暂无相关推荐
客服服务热线
13485538018
24小时服务
微信公众号
手机浏览

CopyrightC 2009-2025 All Rights Reserved 版权所有 芜湖人才网 本站内容仅供参考,不承担因使用信息、外部链接或服务中断导致的任何直接或间接责任,风险自担。如有侵权,请联系删除,联系邮箱:ysznh@foxmail.com 鄂ICP备2025097818号-15

地址: EMAIL:qlwl@foxmail.com

Powered by PHPYun.

用微信扫一扫