2017-07-24 59 views
10

Mam pytanie dotyczące najlepszego sposobu obsługi pobierania danych z interfejsu API innej firmy w architekturze mojej aplikacji phoenix. Zasadniczo mam kontroler, który przyjmuje adres IP klienta jako parametr. Następnie muszę pobrać geolokację powiązaną z tym adresem IP z zewnętrznego interfejsu API i zapisać zarówno w bazie danych (tj. ip i geolocation).Gdzie najlepiej pobrać dane z usługi API innej firmy w ramach architektury aplikacji Phoenix

Obecnie moim podejściem jest użycie wtyczki, a następnie zwrócenie wyniku w strukturze połączenia.

Ale mogę też pobrać dane, tworząc funkcję bezpośrednio w modelu, a następnie wywołać ją podczas operacji zestawów zmian.

A może jest inna alternatywa, taka jak utworzenie aplikacji OTP.

Szukasz wskazówek dotyczących najlepszego podejścia tutaj lub przynajmniej kompromisu między jednym a drugim.

Chociaż mój scenariusz jest specyficzny, jest to prawdopodobnie typowe pytanie projektowe, z którym ludzie się spotykają.

Odpowiedz

1

Mogę powiedzieć, w jaki sposób zbliżam się do nieco podobnego problemu. Moja aplikacja to aplikacja internetowa do wysyłania SMS-ów (używam Twilio jako mojego API).

Gdy użytkownik przesyła swoją wiadomość (numer telefonu to_phone, tekst_tekstu itp.), Zapisuję go w bazie danych bez wykonywania żadnych dodatkowych czynności. Nadałem mu oddzielny status "Kolejki".

Następnie mam GenServer w pętli zbierając wszystkie wiadomości, w których status == w kolejce i wykonywanie wywołań API. W transakcji zmienia status na "Dostarczony" i staje się widoczny dla użytkownika w interfejsie użytkownika.

Nie będzie to użyteczne, jeśli użytkownicy będą oczekiwać, że dane geolokacyjne będą wyświetlane na ekranie wraz z odpowiedzią. W każdym razie, to było podejście, które podjąłem dla mojego przypadku użycia ...