BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

JSON-RPC一览

| 作者 Jonathan Allen 关注 530 他的粉丝 ,译者 张健欣 关注 1 他的粉丝 发布于 2017年12月19日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT