我是React式编程的新手,我正在开发一个api,它聚合了其他3个api的响应。提供的接口如下:
public interface UserServiceApi {
Mono<UserDetailsResponse> getUserDetails(String userId);
}
. . .
public interface OrderServiceApi {
Mono<OrdersResponse> getOrdersByUserId(String userId);
}
. . .
public interface VoucherServiceApi {
Mono<VouchersResponse> getVouchers(String userId);
}
我正在使用的api应该获取用户详细信息,如果注册完成,则按用户id获取订单,如果验证了用户状态,则为用户获取凭证。聚合所有这些数据,根据需要进行转换并返回一个mono。
我想调用userdetailsapi,一旦响应if在这里,就对订单服务和凭证服务进行异步调用。下面是代码现在的样子:
public Mono<SuperApiResponse> getDetails(final String userId) {
userServiceApi.getUserDetails(userId).flatMap(userDetailsResponse -> {
final SuperApiResponse response = new SuperApiResponse();
response.setUserDetails(userDetailsResponse);
if(userDetailsResponse.isSignupComplete) {
Mono<OrderResponse> orderResponse = ordersServiceApi.getOrdersByUserId(userId);
// have to transform this OrderResponse object to another type
}
if(userDetailsResponse.isVerified) {
Mono< VouchersResponse> orderResponse = voucherServiceApi.getVouchers(userId);
// have to transform this VouchersResponse object to another type
}
// how to populate response of these 2 apis in the final response mono object?
return Mono.just(response);
})
}
如何在充分利用React式编程的同时,聚合这3个API的响应?如何异步进行这些调用?
对于这种情况,最佳做法是什么?对于一个完全不熟悉React式编程的人来说,有什么好的、容易理解的阅读材料吗?
1条答案
按热度按时间xeufq47z1#
如serg评论中所述,我认为使用flatmap/zipwith/defaultifempty组合是一种可行的方法。
reactor提供了许多工具,因此我将提供一个示例,通过使用缓存的monos而不是zipwith,允许并发触发凭证和订单请求:
输出给出: