我有一个api需要调用其他3个api,第二个和第三个api调用依赖于第一个api的结果。
我对执行此操作的最佳方法以及使用块、订阅和平面地图之间的区别有点困惑。所有这 3 种方法都适合我,但我不确定哪一种是最好的。
这就是我目前所拥有的:
webClient1.getApi1(request.getId())
.subscribe(api1Response -> {
if (api1Response.hasData()) {
Mono<ApiTwoResponse> monoTwo = webClient2
.post()
.syncBody(...)
.bodyToMono(ApiTwoResponse.class)
monoTwo.subscribe(two -> log.info(two));
Mono<ApiThreeResponse> monoThree = webClient3
.put()
.syncBody(...)
.bodyToMono(ApiThreeResponse.class)
monoThree.subscribe(three -> log.info(three));
}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过阻止,尽管这似乎不鼓励:
Api1Response response = webClient1.getApi1(request.getId()).block()
Run Code Online (Sandbox Code Playgroud)
我也尝试过平面地图,尽管这迫使你返回一些东西:
webClient1.getApi1(request.getId())
.flatmap(api1Response -> {
...
return Mono.empty();
});
Run Code Online (Sandbox Code Playgroud)
感谢对上述代码的任何帮助和反馈。