1. JSON-RPC简介

JSON-RPC是一种基于JSON的跨语言远程调用协议。有文本传输数据小,便于调试扩展的特点。

2. 请求

JSON-RPC非常简单,在请求时向服务器传输数据格式如下(基于JSON2.0)

{
"jsonrpc" : 2.0,
"method" : "sayHello",
"params" : ["Hello JSON-RPC"],
"id" : 1
}
  • jsonrpc:定义JSON-RPC版本。
  • method:调用的方法名。
  • params:方法传入的参数,若无参数则为null。
  • id:调用标识符。可以为字符串,不推荐包含小数(不能准确二进制化),或为null(可能引起混乱)。

3. 响应

服务器返回的数据格式也为JSON,其格式如下:

{
"jsonrpc" : 2.0,
"result" : "Hell JSON-RPC",
"error" : null,
"id" : 1
}
  • jsonrpc:定义JSON-RPC版本。
  • result:方法返回值,调用成功时,不能为null,调用错误时,必须为null。
  • error:调用时错误,无错误返回null,有错误时则返回一个错误对象。
  • id:调用标识符,与调用方传入的标识一致,当请求中的id检查发生错误时(转换错误/无效请求),则必须返回null。

4. 错误

4.1. 错误对象

{
"code" : 1,
"message" : "Nothing found",
"data":null
}
  • code:一个表示错误类型的数字。
  • message:错误描述。
  • data:附加信息,可为null。

4.2. 错误码

错误码-32768到-32000作为预定义错误的保留值,该范围内的任何未定义代码为未来保留使用。

代码 错误 含义
-32700 解析错误 服务器接收到无效的JSON;服务器解析JSON文本发生错误。
-32600 无效的请求 发送的JSON不是一个有效的请求。
-32601 方法未找到 方法不存在或不可见。
-36602 无效的参数 无效的方法参数。
-36603 内部错误 JSON-RPC内部错误。
-32000到-32099 服务器端错误 保留给具体实现服务器端错误。

5. 批量调用

客户端可以发送一个请求对象数组来进行批量调用。当所有的请求都响应完毕后,服务器应以一个数组作为响应,每个请求都应该对应一个请求对象。服务器可以以任何宽度的并行性,以任意的顺序,并发的批量处理一个RPC调用。客户端可以通过id将请求和响应进行匹配。

6. 示例

6.1. 列表形式参数

请求

 {
"jsonrpc":"2.0",
"method": "subtract",
"params":[42, 23],
"id": 1
}

响应

 {
"jsonrpc":"2.0",
"result": 19,
"id": 1
}

6.2. key-value形式参数

请求

 {
"jsonrpc":"2.0",
"method": "subtract",
"params":{
"subtrahend": 23,
"minuend": 42
},
"id": 3
}

响应

 {
"jsonrpc":"2.0",
"result": 19,
"id": 3
}

6.3. 错误的调用

(无id错误)

请求

{
"jsonrpc":"2.0",
"method": 1,
"params": "bar"
}

响应

{
"jsonrpc": "2.0",
"error":{
"code": -32600,
"message": "Invalid Request"
},
"id": null
}

7. 参考文献

JSON-RPC轻量级远程调用协议介绍及使用

JSON-RPC2.0规范翻译中文版

JSON-RPC远程调用协议的更多相关文章

  1. 測试JSON RPC远程调用(JSONclient)

    #include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Auth ...

  2. JSON-RPC轻量级远程调用协议介绍及使用

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

  3. 从0到1:全面理解RPC远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

  4. Java 常用远程调用协议比较

    一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协 ...

  5. 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  6. Openstack Nova 源码分析 — RPC 远程调用过程

    目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacompute ...

  7. go语言net包rpc远程调用的使用

    一.基于http的RPC 服务端: package main; import ( "net/rpc" "net/http" "log" ) ...

  8. dubbo集成zookeeper rpc远程调用

    注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...

  9. rpc远程调用开发

    RPC即远程过程调用,适用于集群管理,集群节点就是RPCServer,而我们发起远程调用的web服务器就是RPCClient.所以是少数rpcClient(可能一个)对多个RPCServer(集群节点 ...

随机推荐

  1. OJ题:输入一个多位的数字,求各数位相加。

    题目内容: 输入一个多位的数字,1求各数位相加. 例如输入12345,则计算1+2+3+4+5=15 输入格式: 一个整数 输出格式: 一个整数 输入样例: 1234567890 输出样例: 45 时 ...

  2. 一键安装LAMP

    一键安装LAMP LAMP是Linux,Apache,MySQL和PHP合起来的简称,用于开发网站.对于初学者而言,没有什么比一键部署一个LAMP开发环境更省心的了,到下面的网址下载BitNami: ...

  3. maven settings 配置文件

    maven settings 配置文件 <?xml version="1.0" encoding="UTF-8"?> <settings xm ...

  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十八):增加排行榜功能

    游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...

  5. ISLR系列:(3)重采样方法 Cross-Validation & Bootstrap

    Resampling Methods 此博文是 An Introduction to Statistical Learning with Applications in R 的系列读书笔记,作为本人的 ...

  6. android动画介绍--Animation 实现loading动画效果

    Animation的使用方法并不难.这里简单的介绍一下使用方法. 先看效果图: 效果还是不错的吧. 下面来看看使用方法. 动画效果是通过Animation来实现的,一共有四种,分别为: AlphaAn ...

  7. unity 球体表面平均分割点

    之前看了别人的一份源码,讲到了球体表面平均分割点,于是也好奇去查了一下算法,自己写不出来,借用算法在unity写了一个小demo using UnityEngine; using System.Col ...

  8. 地产IT人福利:帆软地产BI解决方案全解析

    解决方案下载地址 帆软大型地产集团项目解决方案 下载地址:http://pan.baidu.com/s/1pJGeqKF帆软地产BI解决方案之KPI考核系统 下载地址:http://pan.baidu ...

  9. Windows2008+MyEclipse10+Android开发环境搭配

    Windows2008+MyEclipse10+Android开发环境搭配 知识要点:64位系统中离线安装MyEclipse的ADT插件步骤办法 功能描述:解决Windows2008+MyEclips ...

  10. 高通 android平台LCD驱动分析

    目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...