api - 从 Phoenix 应用程序架构中的第三方 API 服务获取数据的最佳位置

标签 api architecture phoenix-framework

我有一个关于如何最好地处理从我的 phoenix 应用程序架构中的第三方 API 获取数据的问题。本质上,我有一个 Controller ,它接收客户端的 IP 地址作为参数。然后,我需要从外部 API 获取与该 IP 地址关联的地理位置并将两者存储在数据库中(即, ipgeolocation )。

现在我的方法是使用插头,然后在连接结构中返回结果。

但是我也可以通过直接在模型中创建一个函数来获取数据,然后在变更集操作期间调用它。

或者也许还有另一种选择,例如将其设为 OTP 应用程序。

在这里寻找一些关于最佳方法的指导,或者至少是一种与另一种的权衡。

虽然我的场景是具体的,但这可能是人们遇到的常见设计问题。

最佳答案

我可以告诉你我是如何处理一个有点类似的问题的。我的应用程序是一个用于发送 SMS 文本的网络应用程序(我使用 Twilio 作为我的 API)。

当用户提交他们的消息(to_phone_number、body_text 等)时,我将其保存到数据库中而不做任何额外的工作。我给它一个单独的状态“排队”。

然后,我在循环中有一个 GenServer,它接收状态 == 排队的所有消息并执行 API 调用。在事务中,它将状态更改为“已交付”,并且用户可以在 UI 中看到该状态。

如果您的用户希望地理定位数据与他们的响应一起显示在屏幕上,这将不会是一种有用的方法。无论如何,这是我为我的用例采取的方法......

关于api - 从 Phoenix 应用程序架构中的第三方 API 服务获取数据的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290883/

相关文章:

java - 如何使用 swagger 使用以 json 作为有效负载的 post 请求创建 api

java - 应用程序设计问题: scroll and amount problems

go - 如何在 Elixir Phoenix 应用程序中包含和执行 Go

twitter-bootstrap - 使用 Phoenix 的 Delete 方法进行 Bootstrap 样式设置

java - API 中的部分更新

javascript - 有没有任何API或Rails gem可以提取所有股票的主列表?

c# - mySQL .NET API - 从表中删除所有数据

java - 在运行时更改 Guice 绑定(bind)

c# - 避免 Switch 语句的架构

elixir - 在 Phoenix 框架上放置辅助模块的位置