我们使用 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
ethereum
的 JSON-RPC
是通过HTTP传输的,所以查询 web3_clientVersion
可以通过以下命令:
1 | // Request |
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表达动作,类型只有四五种。