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