【发布时间】:2020-02-01 04:47:13
【问题描述】:
从我的后端应用程序(springboot,java8)我将进行多个外部 api 调用。我需要将所有请求和响应数据(包括标头、请求和响应正文)记录到数据库(MongoDB)中。
以下是我的示例代码,这是我尝试捕获每个外部 api 调用的请求和响应的方式。在异常情况下,我会将状态存储为“失败”。
在我的项目中,将在新的第 3 方 api 集成中添加多个模块,因此在每个不同的外部 api 调用的每个模块中,我必须像这样捕获所有请求和响应。我对以下方法不满意。请提出解决此问题的最佳方法。
示例服务层方法
public ResponseDTOFromExternalApi externalApiCallServiceMethod(String clientId, RequestDTO requestDTO) {
ExternalApiCallRequestObj externalApiCallRequestObj = prepareExternalApiRequestObjFromRequestDTO(requestDTO);
ApiCall apiCall = ApiCall.builder()
.clientId(clientId)
.status("SUBMITTED")
.requestPayload(externalApiCallRequestObj)
.build();
apiCall = apiCallRepository.save(apiCall);
ExternalApiCallReponseObj externalApiCallReponseObj = externalApiCallService.callExternalApi1(externalApiCallRequestObj);
apiCall = apiCallRepository.findById(apiCall.getId());
apiCall.setResponsePayload(externalApiCallReponseObj);
apiCall.setStatus("COMPLETED");
apiCallRepository.save(apiCall);
return toDTO(externalApiCallReponseObj);
}
api 调用的示例域
@Document("api_calls")
@Builder
@Data
public class ApiCall {
@Id
private String id;
private String clientId;
private String status;
private Object requestPayload;
private Object responsePayload;
}
【问题讨论】:
标签: java spring-boot design-patterns microservices software-design