Подтвердить что ты не робот

Где лучше всего извлекать данные из стороннего API-сервиса в архитектуре приложения Phoenix

У меня вопрос о том, как лучше всего обрабатывать данные из стороннего API в архитектуре моего приложения phoenix. По сути, у меня есть контроллер, который получает IP-адрес клиента в качестве параметра. Затем мне нужно получить геолокацию, связанную с этим IP-адресом, из внешнего API и сохранить как в базе данных (т.е. ip и geolocation).

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

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

Или, возможно, другая альтернатива, например, создание OTP-приложения.

Ищите какое-то руководство по наилучшему подходу здесь или, по крайней мере, к компромиссам между собой.

Хотя мой сценарий специфичен, это, вероятно, общий дизайнерский вопрос, с которым сталкиваются люди.

4b9b3361

Ответ 1

Я могу рассказать вам, как я приближаюсь к некоторой схожей проблеме. Мое приложение - это веб-приложение для отправки текстов SMS (я использую Twilio в качестве моего API).

Когда пользователь отправляет свое сообщение (to_phone_number, body_text и т.д.), я сохраняю его в базе данных без дополнительной работы. Я даю ему отдельный статус "Очередь".

Затем у меня есть GenServer в цикле, который собирает все Message, где status == поставлен в очередь и выполняет вызовы API. В транзакции он изменяет статус на "Поставлено" и становится видимым для пользователя в пользовательском интерфейсе.

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