我们使用 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表达动作,类型只有四五种。