如何使用mongodb设计具有多个api密钥的基于订阅的api服务?

问题描述 投票:0回答:1

假设我有一个提供某些服务的API。用户必须至少具有一个api密钥才能发出请求。可以说,您每月免费获得1,000个请求,如果您需要更多请求,则按月订阅。

您将如何使用mongodb存储此业务模型,并根据每月请求数应用费率限制?

我正在使用node.js

mongodb api-design
1个回答
0
投票

有很多方法可以解决这个问题,所以这里是我的2美分。

我使用Stripe(用于管理计划和付款处理)和MongoDb(用于存储与用户相关的数据)做了类似的事情。它可能不完全是您想要的,但可能会激发一些想法。

在MongoDB上

MongoDB将保留您的用户API请求计数。根据您的业务规则,此计数可用于接受/拒绝请求。

假设您在MongoDb(或类似产品)上有一个用户集合,则应做出规定以“计数”用户的成功请求。这可以是带有相关时间戳属性的简单计数器属性(这样您就可以知道何时应重置该属性,即一个月后)。除非您有正当的理由,否则避免计数失败的请求(即导致4XX5XX响应的API请求)

基本上,在成功执行用户API请求后,检查计数器是否仍然有效(即在一个月内),然后增加计数-如果一个月过去了,则从0开始计数。您可以使用“$inc“操作符来增加数字,而不是自己增加。

关于它在MongoDB中的表示方式,可以是这样的(在用户文档中:)>

{
  ...
  "apiUsage" : {
    "requestsThisMonth" : 850,
    "updatedAt": "2019-11-21T10:10:10.100Z"
  }
}

在条带上

条带将用于记录一段时间内进行的支票数量,并相应地向用户收费。

Stripe提供了创建Pricing Plans的方法,然后可以将其与用户关联。在这种情况下,您可以使用分层定价

创建每月Metered Usage计划。您可以设置分层定价,以便前1000个单位(即API请求)免费(0.00美元)。一旦它们超过1000个单位,您就可以开始对其充电。

一旦客户订阅了计划,就可以使用Stripe API来增加使用量。

高级别流量

  1. 用户发出API请求
  2. 您的服务会检查MongoDB并决定是要满足还是拒绝该请求。您可以出于某些原因拒绝付款,例如用户的付款卡已过期,或者他们超过了您的上限阈值,等等。
  3. 您的服务满足/拒绝请求
  4. 如果满足请求,则在MongoDB中增加计数
  5. 如果满足请求,则以条带为单位增加计数
  6. 这显然是过于简化的视图,但希望它能使您了解如何完成此操作。

    Note

-除了上面指定的速率限制外,您可能还想考虑具有适当的API速率限制的机制,以防止您的服务受到无法处理的请求的轰炸。这种类型的机制应该在API网关级别完成,而不是使用MongoDB自己完成。例如,如果您使用AWS托管API,则它们为您提供了配置速率限制的方法。
© www.soinside.com 2019 - 2024. All rights reserved.