2013-11-04 144 views
0

我發送一個POST請求來創建一個對象。該對象在服務器上成功創建,但我無法收到響應(放在某處),所以我嘗試再次發送POST請求(以及再次)。結果是服務器端有很多重複的對象。如何避免發送2個重複的POST請求到webservice

什麼是處理這個問題的官方方式?我認爲這是一個非常普遍的問題,但我不知道它的確切名稱,所以不能谷歌它。謝謝。

+0

您可以爲您的請求設置超時窗口 – drtf

+0

Hi @MrKlin,我不太明白。如果我有超時(比方說30秒),那麼沒有響應,我仍然需要重新發送POST請求,並可能在服務器上創建2個重複的對象。 –

+0

Hi @ N.Q.P,如果由於某些原因需要服務器處理您的請求超過30秒(很長時間),您可能會改變一點業務邏輯。說立即返回一個「接收通知」,並在處理完成時提出一個完整的標誌。 – drtf

回答

0

在REST術語,這是在POST用於創建對象的接口如何(和PUT修改,DELETE刪除並GET檢索)被調用時,操作POST歸因未'safe」和非'冪等性的,因爲其他類型請願的第二種操作對收集對象沒有影響。

我懷疑是否有一種「官方」的方式來處理這個問題,但可能有一些設計模式需要處理它。例如,這兩個替代方案可能會在某些情況下解決此問題:

  • 對象具有唯一性約束。例如,存儲唯一用戶名的記錄不能被複制,因爲數據庫會拒絕它。
  • 在客戶端發出POST請求之前,通常在客戶端使用輸入表單加載頁面之前,向每個客戶端發出一次性使用令牌。第一個POST創建一個對象並將該標記標記爲已使用。第二個POST會看到該令牌已被使用,您可以回答「是的,是的,好的,好的!」錯誤或成功消息。

有用鏈接where you can read more about REST