我正在一个SaaS系统上工作,在写的时候,我在想为什么我在我的应用中复制Stripe对象?为什么不直接依赖Stripe来维护所有这些记录。例如,我有模型:
- 客户
- 订阅
- 发票
- 费用
- 付款方式
其中一些(客户、订阅)对我的应用至关重要,必须存在,因为它们包含关于对象的额外信息。其他的,只是条带对象的副本。
因此,我的问题是,在您的架构中,为什么不直接依赖于对Stripe的API调用来为应用提供数据,而不是依赖于API调用和webhook来维护我的应用和Stripe之间的一致状态?
我能想到几种写法。
1.创建一个模型并将所有字段存储在DB中。这是非常耗时和严格的(需要监视和同步大量的webhook)。另一方面,我需要的几乎所有信息都是本地的,不需要API调用就可以工作。
1.为所有对象创建一个模型,但只存储一个PK,一个对相应Stripe对象的引用字段,以及任何特定于我的应用程序的“额外”数据。
1.仅为在我的应用中执行逻辑的对象(客户、订阅)创建模型,并通过API EG加载子对象的示例:
class Subscription
def invoices
Stripe::Invoices.list(subscription: self.stripe_id)
end
end
1条答案
按热度按时间cgh8pdjw1#
将部分或全部状态保留在您端的最大好处是,您不需要发出StripeAPI请求来获取信息,这使得获取信息的速度快得多。
此外,随着您的系统和使用规模的扩大,每次需要这些信息时都向Stripe发出API请求是不现实的,因为您将开始遇到rate limits。
一般来说,最好在优化存储的数据量、为保持同步而编写的逻辑的复杂性以及API请求的数量之间取得良好的平衡。具体的平衡通常取决于特定系统/技术堆栈/业务等的独特需求。