文章目录
- JSON-RPC
- 什么是JSON-RPC
- JSON-RPC java开源实现
- JSON-PRC go开源实现
- JSON-RPC 和 Restful 都属于什么?
- RPC、JSON-RPC和HTTP区别
- 以太坊使用json-rpc?
- JSON-RPC和gRPC
- WEB开发中,使用JSON-RPC好,还是RESTful API好?
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 协议作为与以太坊节点进行通信的标准协议,具体的 JSON-RPC 实现取决于所使用的以太坊客户端或第三方库。
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非常适合强调性能、可扩展性和高效网络通信的场景,例如微服务架构。
总结,选择JSON-RPC还是gRPC取决于具体需求。如果注重互操作性和易用性,且对性能和效率要求不高,可以选择JSON-RPC。如果注重性能、可扩展性和高效的网络通信,尤其是在微服务架构等场景下,可以选择gRPC。
WEB开发中,使用JSON-RPC好,还是RESTful API好?
WEB开发中,使用JSON-RPC好,还是RESTful API好?
参考URL: https://www.zhihu.com/question/28570307?sort=created