皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

JSON-RPC一览

作者 Jonathan Allen     ,译者 张健欣

在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

转自 http://www.infoq.com/cn/news/2017/12/JSON-RPC