Spring: вызывать REST API после получения ответа от другого REST API - PullRequest
0 голосов
/ 31 марта 2020

У меня есть контроллер, который вызывает веб-сервис для запуска пакетного задания , когда возвращается результат, он должен вызвать другой 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);
}

Теперь я хочу знать, является ли хорошей практикой делать это так (синхронно) и все в одном контроллере? Есть другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

С вашим контроллером все в порядке, поскольку внутри него нет логики приложения c, и он фактически вызывает методы обслуживания Но ему не хватает обработки исключений. У вас есть catch с правильными исключениями, с ключевым словом try catch или throws.

0 голосов
/ 31 марта 2020

Решение преобразовать конечную точку в асинхронную зависит от нескольких факторов:

  1. Будет ли выполняться пакетное задание на выполнение времени.
  2. Может ли этот процесс выполняться преобразован в асинхронный.
  3. Ожидает ли пользовательский вариант, что пользователь будет ждать завершения действия?

Если ваш ответ положительный, лучше преобразовать конечную точку в ayschronous и обновите пользователя с деталями позже после того, как все процессы, включая пакетные процессы завершены. Всегда лучше НЕ заставлять пользователя ждать ответа. Неблокирующие запросы имеют смысл, когда вы имеете дело с большим количеством данных и обработкой, необходимой для этих данных. Кроме того, сделав этот запрос асинхронным, вы получите лучший контроль над этапами обработки и предоставите пользователю более качественную статистику, если какой-либо из этапов обработки приведет к сбою. Например, пакетное задание может завершиться неудачно, или второй вызов API оставшейся части может привести к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...