這裏是用例:提示用戶完成API之前警告的NodeJS
用戶調用的API。 API發現它正在覆蓋之前保存的內容 。爲了提前完成,用戶需要說「是,提前 並覆蓋」或「否,不覆蓋」。所以基本上需要一種方式 發回應答,並得到用戶選擇的請求,然後 繼續操作。
我的擔憂是:
- 什麼是這樣做的最佳做法是什麼?
- 如果我休會服務並根據需要返回響應。用戶輸入選擇後是否需要激活相同的API?
我正在使用Nodejs/Express和Angularjs。
這裏是用例:提示用戶完成API之前警告的NodeJS
用戶調用的API。 API發現它正在覆蓋之前保存的內容 。爲了提前完成,用戶需要說「是,提前 並覆蓋」或「否,不覆蓋」。所以基本上需要一種方式 發回應答,並得到用戶選擇的請求,然後 繼續操作。
我的擔憂是:
我正在使用Nodejs/Express和Angularjs。
如果你只是想開發API,那麼你可以:
創建另一個API來檢查是否存在數據;調用API數據是否之前
做像「canOverwrite」在API中的另一個標誌,並與用戶確認:然後
與API繼續與用戶
或確認後如果存在可以被覆蓋。
使用websockets而不是HTTP調用也會給你發送確認信息的靈活性(但可能不適用於AngularJS)。
每個API請求應該可能是無狀態的。要做到這一點,您需要在API中添加一個選項,指示服務器在發生覆蓋時應該執行的操作。客戶端可以指定覆蓋是否存在,或者不覆蓋並返回數據已經存在的狀態。
然後,如果它會提示用戶並進行第二次API調用以請求覆蓋,則由客戶端決定。這是客戶端行爲,而不是服務器策略。
如果客戶端首先發送don't overwite
,然後在提示進行第二次API調用後要求覆蓋,那麼服務器可能必須重新從頭開始重新運行API調用。具體實現是否可以暫時從第一個請求中緩存任何內容以提高第二個請求的性能。這是服務器上的實現選擇,與其他提高性能的緩存相同。
這就是我該怎麼做的。沒有「覆蓋」標記但實際上是覆蓋的請求返回405,並且客戶端將該解釋爲「必須已經有數據,需要請求用戶明確覆蓋」。 – jonrsharpe
由於上面提到的@ jfriend00,REST API應該是無狀態的。但是你可以通過後端nodeJs代碼實現這一點。其實這是一種幻覺,但實際上並非如此。
所以,你將有兩個端點像
/數據/驗證
這只是檢查數據是否存在於數據庫中,併發送一個真或假的UI
/數據/加
現在我f用戶想要覆蓋並點擊UI上的'OVERWRITE'按鈕或者某個東西,向這個端點發送一個覆蓋數據的請求。
如果用戶不想覆蓋,請不要調用添加端點。
問題在於,有人可能在驗證和添加之間添加了數據。在這種情況下,添加端點仍然需要正確行爲,而不是假設如果它被調用,那麼應該覆蓋那裏的任何東西。另請參閱http://stackoverflow.com/questions/38216592/prompt-user-a-warning-before-completing-a-api-nodejs/38216707#comment63856612_38216707對此提出的其他答案。 – jonrsharpe
好點。可能在驗證api中,可以在數據中設置一個標誌,將數據鎖定爲特定時間?隨後的驗證調用只會檢查lockState並在其鎖定時退出。這樣,可以避免競爭條件。 – Srijith
那麼......有狀態?而不僅僅是幻覺。這將工作,但它不是很RESTful! – jonrsharpe
檢查數據是否存在於一個API調用中,然後根據客戶端中的數據做出決定是競爭條件。檢查然後應用覆蓋邏輯需要是服務器上的原子操作,以避免競爭條件與其他某個API請求更改數據是否存在。 – jfriend00
@j_k喜歡在下面的ans指出。如果驗證API之間發生數據更改並繼續執行操作api –
如果API處理事務性數據,則需要具有與驗證api相關的時間戳並更新Pai –