咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

11、JSON-RPC

我们使用 Js / Java / Go 等语言调用以太坊 ethereum 的服务时,以太坊是通过 JSON-RPC 提供服务的,那么什么是 JSON-RPC ?

JSON-RPC

JSON-RPC是一种无状态轻量级远程过程调用(RPC)协议。本规范定义了数据结构及 相应的处理规则。规范本身是传输无关的,可以用于进程内通信、Socket套接字、HTTP 或各种消息通信环境。规范使用JSON(RFC 4627)数据格式。

相较于一般的 RESTAPI 通过网址(如 GET /user)调用远程服务器,JSON-RPC 直接在内容中定义了欲调用的函数名称,如 {“method”: “getUser”},JSON-RPC 更加简单和轻量级。

眼下主流语言都已有 JSON-RPC 的实现框架,Java语言中较好的JSON-RPC实现框架有 jsonrpc4j、jpoxy、json-rpc。三者之中 jsonrpc4j 既可独立使用。又可与 spring 无缝集合,比較适合于基于 spring的项目开发。

Ethereum JSON-RPC

ethereumJSON-RPC 是通过HTTP传输的,所以查询 web3_clientVersion 可以通过以下命令:

1
2
3
4
5
6
7
8
9
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'

// Result
{
"id":67,
"jsonrpc":"2.0",
"result": "Mist/v0.9.3/darwin/go1.4.1"
}

webj 就和 web3.js 等库是对 JSON-RPC 进行封装,方便开发者使用,文档

JSON-RPC 和 REST 的区别

JSON-RPC 在平时开发Web应用时,可以采用 JSON-RPC ,也可以采用 REST

他们各有自己的特点,没有高低之分,只是约定俗成的标准, REST偏向外部调用,JSON-RPC 偏向内部调用采用。

RPC 的思想是把本地函数映射到API,也就是说一个API对应的是一个function,对传输协议没有限制,可以是TCP Socket或者HTTP。

REST 则不然,它的URL主体是资源,是个名词。仅支持HTTP协议,使用HTTP Method表达动作,类型只有四五种。

《使用golang 实现 JSON-RPC2.0》

《JSON-RPC轻量级远程调用协议介绍及使用》