开发申请签名
现在用户已经能看到这个接口了,也能看到这个接口文档,接下来就要在线调用
现在我们可以给每个新注册的用户自动分配一个签名和密钥,去修改一下注册流程:
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 、请求参数传给后端,后端负责调用。
总结
- 前端将用户输入的请求参数和要测试的接口 id 发给平台后端
- (在调用前可以做一些校验)
- 平台后端去调用模拟接口
后端开发在线调用
开发测试接口
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);
}
接口发布,在输入参数调用即可返回结果
记得启动接口项目