2015-05-13 45 views
0

我想知道您對這種情況有何看法。我正在代表客戶對外部API rest服務進行調用,並且我需要保存以記錄該操作,並且我想確保只有當外部API操作成功時才​​保存(或更新)記錄。但是,如果API成功錄製必須保存。雖然我沒有使用它,但我知道在SQL事務的概念中存在解決方案,確保整個事務被保存或不保存。但是,如果部分交易正在調用外部API,例如信用卡API或銀行賬戶,該怎麼辦?你能否介紹一些關於這方面的文檔?調用外部API的SQL事務

我實際上與創建API的人有密切的聯繫,並且可以要求他們更改響應或在需要時執行特殊操作。

下面是一個使用案例(鞋店):在我們的網站

用戶想購買的鞋子。他在表格中填寫信用卡號碼並點擊提交。我們不是讓兩個動作:

  1. API調用信用卡提供商

  2. 插入我們的DB行與信用卡提供商的響應API調用後

這兩種行爲都有可能失敗。我不確定我應該如何處理這些行爲。如果只在API調用之後插入行,我怎麼能確保至少我知道插入行時出錯了?因爲我不想要一個情況,用戶在他的信用卡中收取某些東西的費用,而我沒有該記錄

+0

無論是將太多可能的答案,還是很好的答案將是這種格式太長。請添加詳細信息以縮小答案集或隔離可以在幾個段落中回答的問題。我建議您找到一個開發論壇(可能是[reddit](https://www.reddit.com/)?)找出共性。然後,當您遇到特定的編碼問題時,請回到StackOverflow,我們很樂意提供幫助。 –

+0

我知道這個一般問題,但我真的沒有任何線索。我編輯它一點點,也許它會幫助 –

+0

它仍然非常廣泛。通常,API提供程序提供了一組您應該用來實現其過程的指示信息。 –

回答

0

這是我的臨時解決方案,請告訴我您的想法。 它由六個步驟組成,每一步取決於前一個步驟。它基於名爲payment_successful的額外列,它是0或1.當插入行設置爲0時,信用卡提供商API返回成功的事務響應後,它將更新爲1.爲確保所有數據庫調用都成功每次更改後,我都會用select進行檢查。我會用信用卡例子的鞋購買來證明它。讓我們說,在確認節目購買按鈕,用戶點擊:

  1. 插入一行,購買表(catalogue_id = 132,價格= $ 500,cerdit_card_number = 8988123456,payment_successful = 0),並取回purchase_id PK

  2. 通過purchase_id(之前的插入)從表中選擇行。這可確保該行已成功插入。否則警報(通過電子郵件),什麼是錯

  3. 充分利用信用卡API提供商的呼叫(結果=捲曲(http://api.american-express.com/?credit_card_number=8988123456))

  4. 檢查從信用卡API檢查的結果,如果它成功(如果(結果=== 1)),否則警報,什麼是錯

  5. 由purchase_id更新該行設置payment_successful = 1

  6. 通過purchase_id從表中選擇行和檢查row.payment_successful == 1。否則警報,什麼是錯

詛咒以上的所有網址都沒有真正