【问题标题】:Creating a Rails API for private and public use创建供私人和公共使用的 Rails API
【发布时间】:2014-11-07 18:28:48
【问题描述】:

我已经搜索过这个答案,但没有找到任何东西,需要关于这个概念的帮助。因此,我们创建了一个带有 Rails 的 API,它为我们的 Angular Web 应用程序(单独的服务器)和我们的 iphone 应用程序提供数据。目前人们通过表单登录并从 api 设计发送一个 auth_token 以供将来交互,数据也使用 AWS 密钥进行保护。

现在我们希望向公众开放 API,但仅限于某些订阅计划,并且可能只是部分功能。我们希望使用类似于 Pingdom 的身份验证,如果正确计划中的用户在他们的帐户中生成一个 api 令牌并将此令牌与请求一起发送。这是我有点不知所措的地方,因为如果我为一些通过令牌进行身份验证的用户保护 API 的控制器,那么这也会影响没有 api 令牌的 iPhone 和 Web 应用程序用户?

我无法理解私有 API 的概念,如果某些用户拥有 api 密钥,他们就可以使用它。请帮忙。

【问题讨论】:

  • 我会为外部消费者创建一个 api,并保持内部 api 独立地为您的应用程序提供服务。因为当您打开一个 api 时,您可以随意更改响应

标签: ruby-on-rails api


【解决方案1】:

将您的私有和公共 API 视为同一 API 的非必要兼容版本可能会有所帮助。这与引入 v2 API 的原理相同,它破坏了与 v1 的向后兼容性,但需要同时支持两个版本。

显然,您不希望内部 API 与外部 API 共享版本编号序列。但是有各种 gem 可以帮助您处理版本化的 API,其中可能包括身份验证方法的差异。

因此,您的用户可以使用的 API 在他们看来就像是唯一可用的 API。它可以有自己的版本编号系统,因此如果您决定引入公共 API 的 v2,则可以。但是维护该 API 的同一系统可以为您的“内部”API 做类似的事情,确保其端点与公共端点分开,但允许您以与 v1 和私有实现相同的方式在公共和私有实现之间共享公共代码v2 API 可能会共享一些代码,但也会有所不同。

【讨论】:

  • 谢谢斯科特。嗯,我不确定我是否希望我的团队维护两组完全相同的路线。因此,如果我们以 oauth2 为例,它要求用户在其管理面板中创建应用程序,Angular Web 应用程序和 iPhone 应用程序如何绕过必须通过 oauth 客户端进行身份验证以提取登录用户信息?因为路由将受到 oauth 密钥的保护,并且某些用户不会设置凭据?
猜你喜欢
  • 2012-08-03
  • 1970-01-01
  • 2015-12-11
  • 2019-06-20
  • 1970-01-01
  • 2016-05-30
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多