3 回答

TA貢獻(xiàn)2003條經(jīng)驗 獲得超2個贊
考慮一個RESTful購物籃方案。從概念上講,購物籃是您的事務(wù)包裝器。您可以將多個項目添加到購物籃中,然后提交該購物籃來處理訂單,方法與您可以將Bob的帳戶條目添加到事務(wù)包裝器中,然后將Bill的帳戶條目添加到包裝器中一樣。當(dāng)所有部件都放置到位后,您可以將所有組件部件進(jìn)行POST / PUT事務(wù)包裝。

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊
有幾個重要的問題沒有被這個問題回答,我認(rèn)為這太糟糕了,因為它在Google的搜索詞中排名很高:-)
具體來說,一個不錯的選擇是:如果您兩次發(fā)布(由于中間存儲區(qū)中的某些高速緩存被打斷),則不應(yīng)兩次進(jìn)行轉(zhuǎn)賬。
為此,您將事務(wù)創(chuàng)建為對象。這可能包含您已經(jīng)知道的所有數(shù)據(jù),并使事務(wù)處于掛起狀態(tài)。
POST /transfer/txn
{"source":"john's account", "destination":"bob's account", "amount":10}
{"id":"/transfer/txn/12345", "state":"pending", "source":...}
有了該事務(wù)后,就可以提交它,例如:
PUT /transfer/txn/12345
{"id":"/transfer/txn/12345", "state":"committed", ...}
{"id":"/transfer/txn/12345", "state":"committed", ...}
注意,在這一點上,多次認(rèn)沽并不重要。甚至在txn上的GET都將返回當(dāng)前狀態(tài)。具體來說,第二個PUT會檢測到第一個PUT已經(jīng)處于適當(dāng)?shù)臓顟B(tài),然后將其返回-或者,如果在它已經(jīng)處于“提交”狀態(tài)之后嘗試將其置于“回滾”狀態(tài),則會得到一個錯誤,并將實際的已提交事務(wù)退回。
只要與單個數(shù)據(jù)庫或具有集成事務(wù)監(jiān)控器的數(shù)據(jù)庫進(jìn)行對話,該機制實際上就可以正常工作。您可能還會引入事務(wù)超時,如果需要,甚至可以使用Expires標(biāo)頭表示。

TA貢獻(xiàn)1830條經(jīng)驗 獲得超3個贊
用REST術(shù)語來說,資源是可以與CRUD(創(chuàng)建/讀取/更新/刪除)動詞配合使用的名詞。由于沒有“轉(zhuǎn)移資金”動詞,因此我們需要定義一個可以使用CRUD進(jìn)行操作的“交易”資源。這是HTTP + POX中的示例。第一步是創(chuàng)建(HTTP POST方法)一個新的空事務(wù):
POST /transaction
這將返回交易ID,例如“ 1234”,并返回URL“ / transaction / 1234”。請注意,多次觸發(fā)此POST不會創(chuàng)建具有多個ID的同一事務(wù),并且還避免引入“待處理”狀態(tài)。另外,POST不一定總是冪等的(REST要求),因此通常最好的做法是最小化POST中的數(shù)據(jù)。
您可以將事務(wù)ID的生成留給客戶。在這種情況下,您可以POST / transaction / 1234創(chuàng)建事務(wù)“ 1234”,并且服務(wù)器將返回錯誤(如果已存在)。在錯誤響應(yīng)中,服務(wù)器可以返回帶有適當(dāng)URL的當(dāng)前未使用的ID。用GET方法向服務(wù)器查詢新ID并不是一個好主意,因為GET絕不應(yīng)更改服務(wù)器狀態(tài),而創(chuàng)建/保留新ID會更改服務(wù)器狀態(tài)。
接下來,我們使用所有數(shù)據(jù)更新(PUT HTTP方法)事務(wù),隱式提交:
PUT /transaction/1234
<transaction>
<from>/account/john</from>
<to>/account/bob</to>
<amount>100</amount>
</transaction>
如果之前已對ID為“ 1234”的事務(wù)進(jìn)行了PUT,則服務(wù)器將給出錯誤響應(yīng),否則將給出OK響應(yīng)以及用于查看已完成事務(wù)的URL。
注意:在/ account / john中,“ john”應(yīng)該確實是John的唯一帳號。
- 3 回答
- 0 關(guān)注
- 526 瀏覽
添加回答
舉報