預設安全的 mutations
一些 mutations 原生是冪等的,因為它們根據您提供的穩定識別碼進行 upsert。當您使用相同的輸入呼叫這些時,結果是相同的 — 沒有建立重複項的風險。
- 接受唯一商戶提供的識別碼的 mutations(例如,訂單
externalId)在重複呼叫時將返回現有記錄,而不是建立新的。 - 唯讀操作(queries)總是安全地重試。
當您能夠將自己的穩定識別碼附加到要建立的資源時,最好選擇那條路徑。
非原生冪等的 mutations 的模式
對於建立沒有商戶提供的金鑰的資源的 mutations,請從您的一側將它們視為最多一次:
- 在發送之前持久化請求。 在網路呼叫之前將行寫入您自己的資料庫(狀態
pending)。 - 發送 mutation。 成功時,針對您待處理的資料列記錄返回的資源 id(狀態
committed)。 - 在網路錯誤時,不要盲目重試。 查詢 Zonos Graph 以確定是否建立了資源(例如,通過列出最後幾分鐘內為您的帳戶建立的資源,或通過查詢可以關聯的相關資源)。只有在您能夠確認資源不存在時才重試。
- 在您自己的資料庫中使用唯一約束在代表請求的任何業務金鑰上,所以來自您自己的應用程式的重複重試不能重複提交。
Webhook 傳遞是至少一次
當您消費 Zonos webhooks 時,設計處理器為冪等的 — 相同的事件可能被傳遞多次。根據事件 id 進行去重。請參閱 Webhooks 的事件 id 欄位。
狀態
冪等金鑰支援目前是部分的。選定的內部重試 mutations — 例如,訂單計費重試和退款計費重試流程 — 已經接受冪等金鑰,並用它來去重下游支付處理器呼叫。在 Zonos Graph 上還沒有跨所有面向客戶的 create mutations 的標準化
idempotencyKey參數;這在開發路線圖上。在它發佈之前,請使用下面的模式來讓 mutations 安全地重試。