繁体   English   中英

Spring:在收到来自另一个 REST API 的响应后调用 REST API

[英]Spring : call REST API after receiving response from another REST API

我有一个控制器调用 webservice 来启动批处理作业,当返回结果时,它应该根据这个结果调用另一个 REST API。 然后它应该等待新结果,并将第二个结果返回给用户:

@RestController
public class LaunchController {
    @PostMapping(path = "/launch", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<LaunchResult> launch(@Valid @RequestBody LaunchParams params) {
    // in launch() I call the first REST API
    LaunchResult result = myService.launch(params);
    // here I need to call another REST API
    AnotherResult result2 = callAnotherWebAPIBasedOnThisResult(result);
    return ResponseEntity.ok(result2);
}

现在我想知道像这样(同步)和所有在一个控制器中这样做是一种很好的做法吗? 存在其他方法吗?

将端点转换为异步端点的决定取决于以下几个因素:

  1. 批处理作业是否需要时间来执行。
  2. 能否将此过程转换为异步过程。
  3. 用例是否期望用户等待操作完成。

如果您的回答是肯定的,那么最好将端点转换为异步端点,并在包括批处理在内的所有进程完成后向用户更新详细信息。 最好不要让用户等待响应。 当您处理大量数据并处理这些数据所需的处理时,非阻塞请求是有意义的。 此外,通过使此请求异步,您将更好地控制处理阶段并为用户提供更好的统计信息,以防任何处理阶段导致失败。 例如,批处理作业可能会失败,或者第二个 rest api 调用可能会导致错误。

您的控制器非常好,因为它内部没有任何应用程序逻辑,它实际上调用了服务方法。 但它缺乏异常处理。 您可以使用 try catch 块或 throws 关键字捕获适当的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM