使用冪等性抑制API服務中的重複請求 - tkareine

banq發表於2021-12-26

將冪等性作為建立 API 設計原則來支援。我在這裡選擇使用 GraphQL 作為應用層協議,但無論使用其他協議,例如 REST 或 RPC,原理都是相同的。

  1. GraphQL 查詢操作根據伺服器的當前狀態返回資料。預計隨著時間的推移請求具有特定輸入的查詢可能會返回不同的資料作為輸出,反映服務當前狀態的變化。
  2. 所有 GraphQL 變異操作都必須在名為 的引數中包含操作識別符號作為輸入transactionId。兩個具有相同transactionId值的請求表示請求是重複的。客戶端必須將識別符號生成為隨機 UUIDv4值。
  3. 伺服器必須僅對特定transactionId值應用一次操作 ,即伺服器第一次收到transactionId尚未處理的請求時。
  4. 對具有特定transactionId值的 GraphQL 變異操作的響應 必須始終產生相同的邏輯輸出。如果伺服器成功處理了變更,則響應必須為所有具有相同transactionId 值的請求發出成功訊號。類似地,如果伺服器以失敗的方式完成處理,則對相同的所有響應都transactionId必須表示該失敗。特別是,成功響應可能包含反映資料當前狀態的輸出,但是當客戶端再次請求相同的更改(另一個更改可能已更改資料)時,該輸出可能會有所不同。
  5. transactionId必須按原樣將相同的值傳遞給相關服務。

這些原則同樣適用於公共 API 和內部 API。

除了第一個原則,我會一一介紹這些原則,它應該是自給自足的。

第二個原則可以區分兩個請求並判斷它們是否出於相同的目的,即使輸入的有效載荷是相同的。

詳細點選標題

相關文章