9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

JSON-RPC 一览

  • 2017-12-18
  • 本文字数:836 字

    阅读完需:约 3 分钟

在 12 月 13 日关于 Visual Studio 支持语言服务器协议(Language Server Protocol,LSP)的报道中,我们提到其 LSP 是基于 JSON-RPC 2.0 实现的。尽管早在十多年前就已经被创建,JSON-RPC 并没有像 SOAP 或 REST 那样有名。

顾名思义,JSON-RPC 是基于 JSON 的,用来发起远程程序调用。它与 REST 不同的地方在于,REST 是以数据为中心的;而使用 JSON-RPC,你写的代码大部分是关于创建、修改、检索文档或记录。RPC 设计强调对外部程序函数的调用。当然,正如 REST 调用一样,那些函数也会操作文档,而不仅仅是存储数据。

在很多情况下,JSON-RPC 2.0 可以被当作 SOAP 的一个轻量级替代方案。和 SOAP 类似,它主要关注消息格式。其它问题,例如传输层(sdtio、sockets、HTTP、named pipes 等),不在这个协议的考虑范围。

JSON-RPC 可以和消息队列之类的异步传输方法一起使用,之所以能够这样,是因为每个请求都必须包含一个 correlation id。这使得比普通 HTTP 更高效的通信成为可能,因为它支持在无需多个连接的情况下同时挂起多个请求。

JSON-RPC 的另一个非常有用的功能是,它支持批量操作。也就是说,一条消息可以在一个数组中包含无限数量的请求。对这些请求可以以任意顺序单独响应或者以数组的方式响应,由此也可以看出,使用 correlation id 是非常重要的。

JSON-RPC 也支持通知。通知有点像请求,但是它不包含 correlation id。因此,服务器不会响应这个消息,即使只是告知客户端发生了错误。因此,不建议使用通知。

备注:在语言服务器协议中,微软使用通知来取消一个挂起的请求。而且即使如此,语言服务器也没有义务响应这些通知。

错误消息包含错误代码和错误说明。从 -32768 到 -32000 这个范围的错误代码被协议保留,用于类似“方法没有找到”或者“参数不合法”之类的异常。

查看英文原文: A Look at JSON-RPC


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2017-12-18 18:002094

评论

发布
暂无评论
发现更多内容

阻碍【程序员职业发展】的 5 个“绊脚石”

掘金安东尼

程序员 前端 9月月更

【C语言深度剖析】深入理解字符数组和字符串数组

Albert Edison

C语言 9月月更 strlen 字符数组 字符串数组

库调多了,都忘了最基础的概念-《死锁与范式的碰撞》

知识浅谈

死锁 范式 9月月更

如何刻意练习-中秋读书随笔

刘旭东

刻意练习

B-Tree索引

急需上岸的小谢

9月月更

DevOps实践中的“道法术器”

阿泽🧸

DevOps 9月月更

在线编码、格式转换

人生如梦

React 在线格式化 在线编码 转码工具

5分钟教你如何利用华为云IoT进行物联网设备上云

wljslmz

物联网 IoT 华为云 9月月更

力扣15 - 三数之和【奇妙的双指针】

Fire_Shield

双指针 LeetCode 9月月更

Python 教程之变量(3)—— 全局变量和局部变量

海拥(haiyong.site)

Python 9月月更

TCP/IP参考模型

StackOverflow

编程 计算机网络 9月月更

LeetCode-164. 最大间距(Java)

bug菌

9月日更 Leet Code 9月月更

关于 SAP UI5 所有控件的共同祖先 - sap.ui.base.ManagedObject

Jerry Wang

SAP Fiori SAP UI5 ui5 9月月更

AQS 阻塞队列机制源码分享

new life

AQS

ATDD的小妙用

Bruce Talk

敏捷开发 随笔 Agile

2022-09-11:arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”, 并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 我们最多能将数组分成

福大大架构师每日一题

算法 rust 福大大

Qt实现文本编辑器(一)

中国好公民st

c++ qt 9月月更

【Nacos云原生】阅读源码第一步,本地启动Nacos

石臻臻的杂货铺

云原生 nacos 9月月更

架构师的十八般武艺:架构边界

agnostic

架构边界

【iOS逆向】某不知名App越狱检测

小陈

iOS逆向

Python 教程之变量(2)—— Python中整数的最大可能值是多少?

海拥(haiyong.site)

Python 9月月更

为什么需要微服务

穿过生命散发芬芳

微服务 9月月更

redis 缓存

想要飞的猪

redis 淘汰策略 redis缓存过期

Spring @PostMapping 能在 URL 中带有参数吗

HoneyMoose

许世伟老师架构课笔记分享

BeyondLife

架构师 需求设计

开始思考吧

吴京

学习 思考 思想

VUE v-for 数据引用

HoneyMoose

AQS 条件队列机制源码分享

new life

AQS

LeetCode-454. 四数相加 II(Java)

bug菌

9月日更 Leet Code 9月月更

算法基础(一)| 快速排序和归并排序详解

timerring

算法 9月月更

VUE v-for 循环的 2 个使用

HoneyMoose

  • 扫码添加小助手
    领取最新资料包
JSON-RPC一览_语言 & 开发_Jonathan Allen_InfoQ精选文章