亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在REST中進行交易?

在REST中進行交易?

收到一只叮咚 2019-12-09 09:21:22
我想知道您如何在REST中實現以下用例。是否有可能在不損害概念模型的情況下做?在單個事務范圍內讀取或更新多個資源。例如,將$ 100從Bob的銀行帳戶轉入John的帳戶。據我所知,實現這一目標的唯一方法是作弊。您可以發布到與John或Bob關聯的資源,并使用一個事務執行整個操作。就我而言,這破壞了REST架構,因為您實際上是通過POST來傳送RPC調用的通道,而不是真正對單個資源進行操作。
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

考慮一個RESTful購物籃方案。從概念上講,購物籃是您的事務包裝器。您可以將多個項目添加到購物籃中,然后提交該購物籃來處理訂單,方法與您可以將Bob的帳戶條目添加到事務包裝器中,然后將Bill的帳戶條目添加到包裝器中一樣。當所有部件都放置到位后,您可以將所有組件部件進行POST / PUT事務包裝。


查看完整回答
反對 回復 2019-12-09
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

有幾個重要的問題沒有被這個問題回答,我認為這太糟糕了,因為它在Google的搜索詞中排名很高:-)


具體來說,一個不錯的選擇是:如果您兩次發布(由于中間存儲區中的某些高速緩存被打斷),則不應兩次進行轉賬。


為此,您將事務創建為對象。這可能包含您已經知道的所有數據,并使事務處于掛起狀態。


POST /transfer/txn

{"source":"john's account", "destination":"bob's account", "amount":10}


{"id":"/transfer/txn/12345", "state":"pending", "source":...}

有了該事務后,就可以提交它,例如:


PUT /transfer/txn/12345

{"id":"/transfer/txn/12345", "state":"committed", ...}


{"id":"/transfer/txn/12345", "state":"committed", ...}

注意,在這一點上,多次認沽并不重要。甚至在txn上的GET都將返回當前狀態。具體來說,第二個PUT會檢測到第一個PUT已經處于適當的狀態,然后將其返回-或者,如果在它已經處于“提交”狀態之后嘗試將其置于“回滾”狀態,則會得到一個錯誤,并將實際的已提交事務退回。


只要與單個數據庫或具有集成事務監控器的數據庫進行對話,該機制實際上就可以正常工作。您可能還會引入事務超時,如果需要,甚至可以使用Expires標頭表示。


查看完整回答
反對 回復 2019-12-09
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

用REST術語來說,資源是可以與CRUD(創建/讀取/更新/刪除)動詞配合使用的名詞。由于沒有“轉移資金”動詞,因此我們需要定義一個可以使用CRUD進行操作的“交易”資源。這是HTTP + POX中的示例。第一步是創建(HTTP POST方法)一個新的空事務:


POST /transaction

這將返回交易ID,例如“ 1234”,并返回URL“ / transaction / 1234”。請注意,多次觸發此POST不會創建具有多個ID的同一事務,并且還避免引入“待處理”狀態。另外,POST不一定總是冪等的(REST要求),因此通常最好的做法是最小化POST中的數據。


您可以將事務ID的生成留給客戶。在這種情況下,您可以POST / transaction / 1234創建事務“ 1234”,并且服務器將返回錯誤(如果已存在)。在錯誤響應中,服務器可以返回帶有適當URL的當前未使用的ID。用GET方法向服務器查詢新ID并不是一個好主意,因為GET絕不應更改服務器狀態,而創建/保留新ID會更改服務器狀態。


接下來,我們使用所有數據更新(PUT HTTP方法)事務,隱式提交:


PUT /transaction/1234

<transaction>

  <from>/account/john</from>

  <to>/account/bob</to>

  <amount>100</amount>

</transaction>

如果之前已對ID為“ 1234”的事務進行了PUT,則服務器將給出錯誤響應,否則將給出OK響應以及用于查看已完成事務的URL。


注意:在/ account / john中,“ john”應該確實是John的唯一帳號。


查看完整回答
反對 回復 2019-12-09
  • 3 回答
  • 0 關注
  • 518 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號