Лучший архитектурный шаблон для вызовов Waterfall API - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь реализовать архитектуру, в которой у меня есть клиенты с историей заказов и отгрузок. Я пытаюсь импортировать эти данные в другую систему с помощью вызовов API, но проблема в том, что я не могу импортировать все данные клиентов с помощью одного вызова API. Я использую обещания для создания шаблона водопада, в котором после импорта информации о клиенте делается запрос на импорт заказа, а затем выполняется запрос API импорта отгрузки.

Я пытаюсь использовать AWS Lambda, SQS, Cloudwatch и т. Д. Для этих подключений. Проблема, которую я вижу, связана с последовательными вызовами API.

Поскольку существует три вызова API для импорта данных о клиентах, большая доля ошибок связана с ошибкой соединения, а также с ручным управлением и отслеживанием журналов. Если, скажем, вызов API заказа не удался, то вызов API отгрузки не может произойти.

Я запутался в том, как можно упростить или автоматизировать отслеживание журналов. Как можно уменьшить частоту появления ошибок и как можно переносить данные в случае сбоя при любом подключении API. Любой другой сервис AWS, который я могу использовать? Или еще какие-нибудь очереди SQS, которые я могу использовать для заказов и отгрузки по отдельности?

Спасибо.

1 Ответ

1 голос
/ 21 марта 2019

Как уже упоминалось в комментариях, звучит так, будто вы создаете рабочий процесс и ищете Шаговые функции

Вы в основном разбиваете свой рабочий процесс на конечный автомат, проектируете этот конечный автомат ( задачи и переходы между состояниями) в пошаговых функциях, и он будет управлять состоянием для вас. Обычно задачи запускаются в AWS Lambda.

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

В вашем случае это довольно линейный конечный автомат - позвоните в службу A, затем B, затем C. Вы захотите определить, какой тип перехода и действия происходят также в условиях ошибки (оповестить своего клиента? Другой?).

...