同步请求
一、同步单次请求
同步单次请求,发送则得到返回结果。
1. 接口描述
/user/valid 检查用户名是否可用
-
接口声明
综合工作平台新增用户时验证账号可用性
-
接口约束
无
-
URI
GET /user/valid
检查账号是否可用输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
loginName |
是 |
String |
用户名 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"loginName":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
检查账号是否可用输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
| // 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("loginName", "Tom");
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间(毫秒),地址及端口号填写配置文件中 middleware-recServer 下的配置
.create("http://localhost:8888", 50000)
// 请求类型,根据服务定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件中 repchain-services-serviceId 配置填写,决定请求哪个服务
.setServiceId("1")
// 设置服务定义访问的url
.setUrl("/user/valid")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg();
|
二、同步多次请求
同步多次请求,如果多次请求包含在同一个方法中,推荐将存证的请求cid设置成一致。
若将请求cid设置为同一个,则需要将每次请求的序号进行递增操作。
1. 接口描述
见同步单次请求中的接口描述。
2. 代码示例
| // 1.第一次请求
Map<String, Object> map = new HashMap<>(1);
map.put("loginName", "12110107bi45jh675g");
// 传输设置
ReqOption reqOption = new ReqOption();
// 设置是否为最后一次请求,默认为true
reqOption.setIsEnd(ReqOption.FALSE);
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/valid")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg(reqOption);
// 2. 第二次请求
reqOption = new ReqOption();
// 由于是同一次请求,所以请求id需要一致,获取上一次请求id
reqOption.setCid(result.getCid());
// 设置请求序号,默认为1
reqOption.setSeq(2);
// 设置是否为最后一次请求,默认为true
reqOption.setIsEnd(ReqOption.FALSE);
// 设置请求参数
map = new HashMap<>(1);
map.put("loginName", "yewu");
result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/valid")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg(reqOption);
// 3. 第三次请求 (最后一次请求)
reqOption = new ReqOption();
// 由于是同一次请求,所以请求id需要一致,获取上一次请求id
reqOption.setCid(result.getCid());
// 设置请求序号,默认为1
reqOption.setSeq(3);
// 设置请求参数
map = new HashMap<>(1);
map.put("loginName", "test");
result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/valid")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg(reqOption);
|
三、同步上传文件
注意
- 上传文件的方式为,将文件的 绝对路径 发送给中间件,而不是将文件流发送给中间件。
- 由于中间件和宿主服务部署在同一个操作系统中,所以中间件接收到文件路径后,可以直接读取到文件,并通过grpc方式发送给服务方中间件,进行文件传输。
- 同步上传文件方式仅适用于较小的文件传输,如果文件较大,请适当增加客户端超时时间,或选择异步文件传输的方式进行文件上传。
- 由于中间件托管了文件传输,所以在文件传输过程中可以携带参数进行传输。
- 当前版本文件传输,单次请求只支持单文件传输。若要传输多个文件,请将多个文件压缩为一个文件进行传输,或者多次调用文件传输请求。
- 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。
1. 接口描述
/user/upload 文件上传
-
接口声明
使用中间件客户端同步上传文件时调用该接口
-
接口约束
无
-
URI
POST /user/upload
文件上传输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
editor |
否 |
String |
编辑人 |
2 |
file |
否 |
String |
文件路径 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"editor":"XXXXXXXXX",
"file":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
文件上传输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
| Map<String, Object> map = new HashMap<>(1);
map.put("editor", "Jack");
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.POST)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/upload")
// 设置传输的数据
.setForm(map)
// 设置文件在传输参数中字段
.setFileField("file")
// 设置传输的文件
.setFile(new File("/home/repchain/test.tar.gz"))
// 发送数据
.sendFile();
|
四、同步下载文件
注意
- 下载文件是通过中间件进行文件下载。
- 文件下载完成后,中间件会将下载的文件地址返回给宿主服务。
- 宿主服务可以直接读取文件。
- 下载的文件会写入
InterCoResult
对象中,filePath
字段下,字段下为文件的绝对路径。
- 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。
1. 接口描述
/user/download 文件下载
-
接口声明
使用中间件客户端同步下载文件时调用该接口
-
接口约束
无
-
URI
GET /user/download
文件下载输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
username |
否 |
String |
用户名 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"username":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
文件下载输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
由于文件传输交由中间件进行托管,所以下载文件时,需要约定一个方式通知中间件文件的具体地址。
中间件约定的方式为,将文件路径写入到response的header中。
| // 将文件绝对路径设置到header中,参数为filePath,此处需要填写服务器上文件的绝对路径
response.setHeader("filePath", "/test.zip");
|
| // 构造请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("username", "Jack");
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 500000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/download")
// 设置传输的数据
.setForm(map)
// 发送数据
.download();
|