跳转至

同步请求

一、同步单次请求

同步单次请求,发送则得到返回结果。

注意

在一次调用中只发送一次同步请求数据。

1. 接口描述

/user/valid 检查用户名是否可用

  • 接口声明

    综合工作平台新增用户时验证账号可用性

  • 接口约束

  • URI

    GET /user/valid

检查账号是否可用输入参数如下:

序号 参数 是否必填 参数类型 描述
1 loginName String 用户名
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
{
 "loginName":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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);

三、同步上传文件

注意

  1. 上传文件的方式为,将文件的 绝对路径 发送给中间件,而不是将文件流发送给中间件。
  2. 由于中间件和宿主服务部署在同一个操作系统中,所以中间件接收到文件路径后,可以直接读取到文件,并通过grpc方式发送给服务方中间件,进行文件传输。
  3. 同步上传文件方式仅适用于较小的文件传输,如果文件较大,请适当增加客户端超时时间,或选择异步文件传输的方式进行文件上传。
  4. 由于中间件托管了文件传输,所以在文件传输过程中可以携带参数进行传输。
  5. 当前版本文件传输,单次请求只支持单文件传输。若要传输多个文件,请将多个文件压缩为一个文件进行传输,或者多次调用文件传输请求。
  6. 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。

1. 接口描述

/user/upload 文件上传

  • 接口声明

    使用中间件客户端同步上传文件时调用该接口

  • 接口约束

  • URI

    POST /user/upload

文件上传输入参数如下:

序号 参数 是否必填 参数类型 描述
1 editor String 编辑人
2 file String 文件路径
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
4
{
 "editor":"XXXXXXXXX",
 "file":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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();

四、同步下载文件

注意

  1. 下载文件是通过中间件进行文件下载。
  2. 文件下载完成后,中间件会将下载的文件地址返回给宿主服务。
  3. 宿主服务可以直接读取文件。
  4. 下载的文件会写入 InterCoResult 对象中,filePath 字段下,字段下为文件的绝对路径。
  5. 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。

1. 接口描述

/user/download 文件下载

  • 接口声明

    使用中间件客户端同步下载文件时调用该接口

  • 接口约束

  • URI

    GET /user/download

文件下载输入参数如下:

序号 参数 是否必填 参数类型 描述
1 username String 用户名
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
{
 "username":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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();
回到页面顶部