JSON-RPC

官网: https://www.jsonrpc.org/
(译) JSON-RPC 2.0 规范(中文版): https://www.w3cschool.cn/ycuott/z7er3ozt.html

什么是JSON-RPC

JSON是一种轻量级的数据交换格式,它可以表示数值、字符串、序列及名/值对集合。

JSON-RPC是一种无状态的,轻量级的远程程序调用协议。叫 JSON 的原因是因为返回值是 JSON。

JSON-RPC协议中的客户端一般是为了向远程系统请求执行某个方法。客户端向实现了JSON-RPC协议的服务端发送请求,多个输入参数能够通过数组或者对象传递到远程方法,这个远程方法也能返回多个输出数据,具体是什么,当然要看具体的方法实现。

所有的传输都是单个对象,用JSON格式进行序列化。请求包含三个特定属性:

  • method,方法,是等待调用的远程方法名,字符串类型
  • params,参数,对象类型或者是数组,向远程方法传递的多个参数值
  • id,任意类型值,用于和最后的响应进行匹配,也就是这里设定多少,后面响应里这个值也设定为相同的

demo:

curl -X POST \
     -H "Content-Type: application/json" \
     --data '{ "jsonrpc": "2.0", "method": "Filecoin.ChainHead", "params": [], "id": 3 }' \
     'http://127.0.0.1:1234/rpc/v0'

响应的接收者必须能够给出所有请求以正确的响应。响应也有三个属性:

  • result,结果,是方法的返回值,如果方法执行时出现了错误,那么这个值必须为空
  • error,错误,当出现错误时,返回一个特定的错误编码,没有错误就为空值
  • id,就是请求带的那个id值,用于匹配

需要注意到,有一些场景下,是不用返回值的,比如只对客户端进行通知,由于不用对请求的id进行匹配,所以这个id就是不必要的,置空或者直接不要了。

总结:JSON-RPC比较符合直观,格式也相对宽松;RESTFUL太死板、SOAP太麻烦,那就是JSON RPC

JSON-RPC java开源实现

官网:https://github.com/briandilley/jsonrpc4j

JSON-PRC go开源实现

使用json-prc的一个小demo:
https://github.com/shepf/star-tools

JSON-RPC 和 Restful 都属于什么?

答:都属于 Web Service 模型,该模型用于帮助人们解决应用程序与服务器传递数据的问题。

而基于该模型的解决方案大体上有三类,即:

  • SOA 模型(面向消息)
  • RPC 模型(面向方法)
  • REST 模型(面向资源)其中 RPC 模型,又分成三类:
    XML-RPC
    JSON-RPC
    SOAP + WSDL [SOAP 本质上是 XML-RPC 的升级版]

已经没有人用 SOA 模型解决问题了。

接着我们再了解一点,那就是 RPC 模型的这三种解决方案,现在还有人用的,也只剩下 JSON-RPC 一种了。

总结: 目前主要使用 JSON-RPC 、REST。

RPC、JSON-RPC和HTTP区别

【基础】RPC、JSON-RPC和HTTP区别
参考URL: https://blog.csdn.net/chenguolinblog/article/details/90607551

以太坊使用json-rpc?

在以太坊中,使用 JSON-RPC 协议可以与以太坊节点进行交互,例如发送交易、查询区块链数据、订阅事件等操作。以太坊节点提供了一个 JSON-RPC 接口,客户端可以通过发送符合以太坊 JSON-RPC 协议规范的请求来与节点进行通信。

在具体实现方面,以太坊节点使用了不同的 JSON-RPC 库或框架来实现 JSON-RPC 协议。最常用的是 Go 语言实现的 Geth 节点,它使用自己的 JSON-RPC 实现。此外,还有其他以太坊客户端,如 Parity、OpenEthereum,它们也使用自己的 JSON-RPC 实现。此外,还有一些第三方的 JSON-RPC 库可供使用,如 web3.js 和 web3.py,它们提供了对以太坊 JSON-RPC 接口的封装和更易于使用的 API。

JSON-RPC和gRPC

JSON-RPC和gRPC都是远程过程调用(RPC)框架,但它们在底层技术、数据序列化格式和使用场景上有所不同。在构建区块链时,选择JSON-RPC还是gRPC取决于几个因素。

  • JSON-RPC:
    JSON-RPC是一种轻量级的RPC协议,使用JSON(JavaScript对象表示法)进行数据序列化。
    它简单易懂,广泛支持各种编程语言。
    JSON-RPC通常在HTTP或WebSocket上实现,适用于基于Web的应用程序。它支持各种数据类型,并且可读性强,这在开发和调试过程中非常有帮助。
    JSON-RPC非常适合强调互操作性和易于实现的场景,而不是性能和效率。

  • gRPC:
    gRPC是由Google开发的高性能RPC框架。它使用Protocol Buffers(protobuf)作为默认的数据序列化格式。
    Protocol Buffers是一种二进制序列化格式,可以高效紧凑地表示结构化数据。
    gRPC支持多种编程语言,并提供双向流式传输、流量控制和身份验证等功能。它使用HTTP/2作为传输协议,实现了高效的多路复用、头部压缩和服务器推送等特性。
    gRPC非常适合强调性能、可扩展性和高效网络通信的场景,例如微服务架构。

WEB开发中,使用JSON-RPC好,还是RESTful API好?

WEB开发中,使用JSON-RPC好,还是RESTful API好?
参考URL: https://www.zhihu.com/question/28570307?sort=created

03-02 06:34