API项目5:申请签名 & 在线调用接口

开发申请签名

现在用户已经能看到这个接口了,也能看到这个接口文档,接下来就要在线调用

现在我们可以给每个新注册的用户自动分配一个签名和密钥,去修改一下注册流程:

backend 项目,找到 UserServiceImpl.java 中的 userRegister

①在插入数据前增加分配 ak、sk,把插入数据变成第四步

②找到 User.java,补充 ak、sk

③在 UserMapper.xml 也添加上 ak、sk

回到 UserServiceImpl.java 中的 userRegister, 把得到的值设置给用户

重启后端项目,访问 http://localhost:8101/api/doc.html 然后注册

去数据库里看一下

注册时自动分配 ak、sk 就搞定了

创建真实数据

用户也有签名了,就可以在线来调用这个接口,回到前端页面创建一个真实一点的数据

别忘了添加请求参数

接下来要实际地让后端去调用这个接口

调用流程

为了更规范、更安全,以及方便进行统计,建议使用后端调用的方式。这种方式更加规范和安全,还可以隐藏接口地址。如果直接将模拟接口完全开放给用户,那么后续的网关和计费等工作可能会徒劳无功。

前端要做的事情,就是把所有它要调用的接口 id 、请求参数传给后端,后端负责调用。

总结

  1. 前端将用户输入的请求参数和要测试的接口 id 发给平台后端
  2. (在调用前可以做一些校验)
  3. 平台后端去调用模拟接口

后端开发在线调用

开发测试接口

InterfaceController

/**
 * 测试调用
 *
 * @param interfaceInfoInvokeRequest
 * @param request
 * @return
 */
@PostMapping("/invoke")
public BaseResponse<Object> invokeInterfaceInfo(@RequestBody InterfaceInfoInvokeRequest interfaceInfoInvokeRequest,
                                                HttpServletRequest request) {
    if (interfaceInfoInvokeRequest == null || interfaceInfoInvokeRequest.getId() <= 0) {
        throw new BusinessException(ErrorCode.PARAMS_ERROR);
    }
    long id = interfaceInfoInvokeRequest.getId();
    String userRequestParams = interfaceInfoInvokeRequest.getUserRequestParams();
    InterfaceInfo oldInterfaceInfo = interfaceInfoService.getById(id);
    if (oldInterfaceInfo == null) {
        throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);
    }
    if (oldInterfaceInfo.getStatus() == InterfaceInfoStatusEnum.OFFLINE.getValue()) {
        throw new BusinessException(ErrorCode.PARAMS_ERROR, "接口已关闭");
    }
    // 获取当前登录用户的ak和sk,这样相当于用户自己的这个身份去调用,
    // 也不会担心它刷接口,因为知道是谁刷了这个接口,会比较安全
    User loginUser = userService.getLoginUser(request);
    String accessKey = loginUser.getAccessKey();
    String secretKey = loginUser.getSecretKey();
    SuApiClient tempsuApiClient = new SuApiClient(accessKey, secretKey);
    // 我们只需要进行测试调用,所以我们需要解析传递过来的参数。
    Gson gson = new Gson();
    // 将用户请求参数转换为com.model.User对象
    com.sujie.suapiclientsdk.model.User user = gson.fromJson(userRequestParams, com.sujie.suapiclientsdk.model.User.class);
    // 调用YuApiClient的getUsernameByPost方法,传入用户对象,获取用户名
    String usernameByPost = tempsuApiClient.getUserNameByPost(user);
    // 返回成功响应,并包含调用结果
    return ResultUtils.success(usernameByPost);
}

接口发布,在输入参数调用即可返回结果

记得启动接口项目

上一篇:动态规划 - 完全背包问题-题解思路


下一篇:构建架构与业务一致性及合规性的路径:企业数字化转型的深度解读