JSON-RPC是什么?和HTTP request的区别?

RPC(Remote Procedure Call)指的是远程过程调用,简单的说,RPC就是从一台机器上通过参数传递的方式调用另一台机器上的一个函数或方法并得到响应结果。
JSON-RPC:remote procedure call protocol encoded in JSON
HTTP:可以看作是RPC的一种具体形式

区别:

  • HTTP有标准,具有通用性,如格式、字段等等,可以方便地在网络上开放HTTP API让别的机器来使用这台服务器上的功能。
  • RPC没有标准(json-rpc有),通常是同一个公司内部的两台机器之间通信,大家会按照实际需要去自定制一套RPC,这样做的好处是灵活高效,但是坏处就是没有通用性。
  • JSON RPC: 相对于一般的HTTP请求通过URI调用远程服务器,JSON-RPC直接在内容中定义了要调用的函数名称(如 {“method”: “getUser”}),对于开发者来说非常的方便。

JSON-RPC格式:

JSON-RPC 2.0和1.0之间一些差异,我们这里介绍2.0的使用,一个JSON-RPC的请求必须包含以下4个字段。

request

  1. jsonrpc: 指定JSON-RPC的版本,必须设置为2.0
  2. id: 调用标识符,用于标示一次远程调用过程,值必须包含一个字符串、数值。
  3. method: 所要调用方法名称的字符串
  4. params: 方法传入的参数,若无参数则传入空[]

response:

  1. jsonrpc: 指定JSON-RPC的版本,固定为为2.0
  2. id: 调用标识符,用于标示一次远程调用过程,值必须包含一个字符串、数值。
  3. result: 如果调用成功则显示响应结果
  4. error: 如果调用失败则显示错误的信息,error带有以下几个字段
    1. code: 错误类型,必须为整数 【必须】
    2. message: 错误的简单描述字,该描述应尽量简短 【必须】
    3. data: 包含关于错误附加信息的基本类型或结构化类型 【可选】

参考:https://blog.csdn.net/chenguolinblog/article/details/90607551

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中使用sslKey文件调用JSON-RPC 2.0接口,可以按照以下步骤进行操作: 1. 导入必要的库 需要导入以下库: - org.apache.http.client.HttpClient - org.apache.http.client.methods.HttpPost - org.apache.http.entity.StringEntity - org.apache.http.impl.client.HttpClients - org.apache.http.util.EntityUtils - org.json.JSONObject - java.security.KeyStore - javax.net.ssl.SSLContext - javax.net.ssl.TrustManagerFactory - javax.net.ssl.KeyManagerFactory 2. 加载sslKey文件 使用Java的KeyStore类加载sslKey文件,例如: KeyStore keyStore = KeyStore.getInstance("PKCS12"); FileInputStream fis = new FileInputStream("sslKey.p12"); keyStore.load(fis, "password".toCharArray()); 3. 创建SSLContext 使用KeyManagerFactory和TrustManagerFactory创建SSLContext,例如: KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, "password".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); 4. 创建HttpClient 使用HttpClients.createDefault()创建HttpClient,并使用刚刚创建的SSLContext设置其SSL socket factory,例如: HttpClient httpClient = HttpClients.createDefault(); HttpClient httpClient = HttpClients.custom() .setSSLContext(sslContext) .build(); 5. 发送POST请求 使用HttpPost类创建POST请求,并将请求体设置为JSON-RPC 2.0请求体,例如: HttpPost request = new HttpPost("https://example.com/api"); request.setHeader("Content-type", "application/json"); String json = "{\"jsonrpc\":\"2.0\",\"method\":\"getUser\",\"params\":[\"user123\"],\"id\":1}"; request.setEntity(new StringEntity(json)); 6. 解析响应 执行请求并获取响应,然后解析JSON格式的响应体,例如: HttpResponse response = httpClient.execute(request); String responseString = EntityUtils.toString(response.getEntity(), "UTF-8"); JSONObject jsonResponse = new JSONObject(responseString); if (jsonResponse.has("result")) { JSONObject result = jsonResponse.getJSONObject("result"); // do something with result } else if (jsonResponse.has("error")) { JSONObject error = jsonResponse.getJSONObject("error"); // handle error } 以上就是使用sslKey文件调用JSON-RPC 2.0接口的步骤,需要注意的是,要根据实际情况替换示例中的URL、请求体和响应体解析逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值