0

我是一个学生在美国著名的集训学习web开发。对于我的顶点项目,我决定尝试构建一个相当简单的应用程序,其中一个经过验证的用户可以向另一个用户发送一定数量的比特币(我向我的老师描述为瓶装小费平台)。虽然这在理论上听起来很简单,但我担心跳槽的问题有很多。在自定义实现第三方API资源的Rails应用

我建立与导轨这个应用程序,使用Coinbase API。在我的学校,我们学习了一个相当严格的MVC架构。这里是我发现我的第一个问题的地方。关于资源,我们基本上是从零开始构建的;这将标志着我第一次尝试在后端实施第三方API。我在Coinbase文档中已经注意到,我需要使用多个明确定义的资源。最值得注意的资源是用户和账户(我将账户作为'配置文件'搭建起来,但是它们在ERD中的用途相同)。

如果我与这​​些预建资源的工作,做我需要充分脚手架他们,或可我只是将它们导入到我的文件,然后自定义代码写信给我的规格?如果是这样,对我来说简单地撕毁我的脚手架并从头开始是合理的吗?更广泛地说,我应该如何将预先存在的资源合并到我的MVC体系结构中?

任何帮助是极大的赞赏!

回答

0

要使用条纹为例,因为他们的文档是最好的:

内,您的Rails应用程序,你有一个User模型。对于这个例子的目的,您的用户有一个idemail,并且stripe_customer_id

user.rb:(“?如果它超时或错误”)

before_create :create_stripe_customer 

def create_stripe_customer 
    stripe_customer = Stripe::Customer.create(
    :email => "[email protected]", 
) 
    self.stripe_customer_id = stripe_customer.id 
end 

def stripe_customer 
    @stripe_customer ||= Stripe::Customer.find(self.stripe_customer_id) 
end 

使用before_create对外部API是不可取但为了学习该怎么做,没关系。

如果你问“我应该复制在自己的数据库中的所有数据?”答案是不;让API完成这项工作,但缓存结果并确保您不会使用外部API请求阻止应用的请求。

+0

我认为它变得更清晰一些。 'Stripe :: Customer.create'正在访问资源并使用它的方法。所以,如果我想让我的用户创建一个钱包,我需要调用'Coinbase :: Wallet :: Client.create_account'。 老实说,我不知道我是否在复制数据库中的数据。我正确地猜测'Stripe :: Customer.create'调用的结果存储在他们的数据库而不是我自己的数据库中,而且我应该只保留自己调用他们的数据库的必要(这就是你似乎在'stripe_customer'方法中)? – d00medman

+0

没错。它将数据发送到他们的服务器(通过HTTP请求)供他们存储。让您的API提供者(Coinbase,Reddit,Stripe)在处理业务逻辑时处理数据模型(不要重新实现他们已经做的事),因为它涉及到与您的界面进行交互。 –

+0

酷,我有一些更多关于编写这些代码出来,以及其他关注点:1)我是正确猜测,与第三方的API进行交互时,我并不真的需要触摸控制器,因为大多数的这个繁重的工作是在模型中处理的? 2.)我已经安装了Gem,但我不确定我应该在哪里放置需求声明。我的直觉在课堂定义之外,在文件的最顶端,但我对此很不自信。 3。)应该与w/coinbase交互的模型从ActiveRecord下降,还是我需要一个不同的超类? – d00medman