【问题标题】:Rails - API calls instead of databaseRails - API 调用而不是数据库
【发布时间】:2014-02-03 22:50:30
【问题描述】:

我正在编写一个应用程序,它是 rails 4 中两个 API 之间的“连接器”。

 -----              --------                               ------
|     | Webhooks   |        |  API Calls through a client |      |
| API | ---------> | My APP | --------------------------> | API' |
|     |            |        |                             |      |
 -----              --------                               ------

它是单向连接器,没有数据库,只有数据转换和 API 调用。

我想使用模型在里面进行 API 调用。即产品型号:

  • 查找产品
  • 保存产品
  • 等等......我可以用数据库做同样的事情,但用 API 代替

最棘手的部分是 API 身份验证。我在每个 webhook 之前都有一个 before_filter 来检索好的帐户和 API 密钥,我需要找到一种方法将我的 API 客户端传输到模型以执行调用。两个 webhook 的 API 帐户可能不同。

所以两个问题:

  • 这样做是否正确(在模型中调用 API)?为了避免代码重复并拥有瘦控制器
  • Rails 有没有一种方法可以将一些数据从控制器传递到模型,而无需为我的 API 客户端的每个方法设置特殊参数?

提前致谢

【问题讨论】:

标签: ruby-on-rails api webhooks


【解决方案1】:

是的,您的逻辑仍应封装在产品“模型”中。它在概念上与 activerecord 和 activeresource 相同。不过,我对 API 调用感到困惑。你是说你必须通过 webhook 的 API 认证?它是否因模型而异,还是取决于谁触发了 webhook 或其他完全不同的东西?目前尚不清楚您要做什么,因此举个例子会有所帮助。

【讨论】:

  • 对不起,我会尝试更具体。我收到了来自电子商务平台(纯 JSON)的 webhook,在那个钩子中有一个“商店 id”。当我收到钩子时,我检索了与该“商店 ID”相关的 API' 凭据,以在正确的帐户中创建产品或任何内容。因此,当我初始化我的 API 客户端以创建产品时,我必须指定一个电子邮件 + 一个我在 before_filter 中检索到的 API 密钥。好点了吗?
  • 好的,所以产品属于“商店”?在这种情况下,我可能会将 shop_id 传递给 Product API 代理类,并从将 shop_id 映射到电子邮件 + api 密钥的 Shop 类中查找 API 凭据。因此,您将在产品上有一个“商店”方法,对于您的 api,您将拥有 api_class.some_api_call(shop.email, shop.api_key, other params)。 shop 方法会调用 @shop ||= Shop.find(shop_id)
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2023-03-26
  • 2015-04-25
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多