【问题标题】:Spring : call REST API after receiving response from another REST APISpring:收到来自另一个 REST API 的响应后调用 REST API
【发布时间】:2020-03-31 09:05:28
【问题描述】:

我有一个控制器,它调用一个 web 服务来启动一个批处理作业,当返回结果时,它应该根据这个结果调用另一个 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);
}

现在我想知道像这样(同步)并且在一个控制器中执行它是一种好习惯吗?是否存在其他方法?

【问题讨论】:

    标签: java spring rest api


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-06-04
        • 1970-01-01
        • 2020-07-17
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多