方法一: 转换工具util
提供一个ConvertUtil类
例如:
ConvertUtil 里面包括 CreateParam 到 CreateRequest 中的转换,包括 CancleParam 到 CancelRequest 中的转换
优点:
所有的转换方法都可以在这个类里找到。
缺点:
1. 有接口修改就需要修改此类。
2. 没有统一的入口修改请求和方法。
方法二: 抽象方法 + adaptor
提供一个抽象的requestManager 抽象请求方法
对外部应用的请求可以抽象为:
- parseRequest
- doRequest
- parseResponse
三个基本操作
public <Param, Req, Resp> Result<Resp> request(Config config, Param param, Adaptor<Param, Req, Resp> adaptor){
ApiEnum api = adaptor.getApiName();
try{
Req request = adaptor.buildRequest(config, param);
if (request == null){
log.error(ErrorEnum.PARAM_ERROR.getDesc() + ": param=" + param);
return ResultUtils.buildErrorResult(ErrorEnum.PARAM_ERROR, "param=" + param);
}
IRequester<Req> sender = getRequester();
Result<String> senderResult = sender.request(config, request, api);
return adaptor.parseResponse(config, senderResult, param);
} catch (Exception e) {
log.error("execute error ", e)
return ResultUtils.buildErrorResult(ErrorEnum.SYSTEM_ERROR, e.toString());
}finally {
// 记录结果到数据库
Record2DB();
}
}
优点:
- 针对单个外部接口符合开放关闭原则,新增修改接口的请求和响应转换不在修改util类
- requestSender 可以由子类确定,确定是http 还是hsf
- 统一的记录日志,对外部的请求会有同一个日志收口