前言
之前使用java做接口测试,均使用HttpClient来进行,今次遇到一个新的项目使用python的odoo框架开发,其接口和之前的网站稍有不同,导致在前台看到的接口返回内容和之前的差别很大,一般的restful接口在控制台里是这样的:
而现项目的控制台显示如下:
这种参数用通用的HttpClient就不好进行接口下发了,这只是个比较简单的参数,实际上args里还有可能包含字符串列表等类型,故采用JSONRPC的java版进行接口下发就比较方便;
协议简述
json-rpc是基于json的跨语言远程调用协议,比xml-rpc、webservice等基于文本的协议传输数据格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是非常优秀的一种远程调用协议。目前主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用,又可与spring无缝集合,比较适合于基于spring的项目开发。
一、JSON-RPC协议描述
son-rpc协议非常简单,发起远程调用时向服务端传输数据格式如下:
{ "method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1}
参数说明:
- method: 调用的方法名
- params: 方法传入的参数,若无参数则传入 []
- id : 调用标识符,用于标示一次远程调用过程
服务器其收到调用请求,处理方法调用,将方法效用结果效应给调用方;返回数据格式:
{
"result":"Hello JSON-RPC",
"error": null,
"id": 1
}
参数说明:
- result: 方法返回值,若无返回值,则返回null。若调用错误,返回null。
- error :调用时错误,无错误返回null。
- id : 调用标识符,与调用方传入的标识符一致。
以上就是json-rpc协议规范,非常简单,小巧,便于各种语言实现。
使用JSON-RPC进行接口下发
JSON-RPC的java版配置比httpClient要简单很多,不需要管理连接、连接池、关闭返回等等,甚至连下发方式都略掉了。
maven地址
源码地址
一、maven配置
这里jsonrpc就一个包,另外一个用于json字符串处理;
<dependency>
<groupId>com.github.briandilley.jsonrpc4j</groupId>
<artifactId>jsonrpc4j</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>