使用冪等性抑制API服務中的重複請求 - tkareine
將冪等性作為建立 API 設計原則來支援。我在這裡選擇使用 GraphQL 作為應用層協議,但無論使用其他協議,例如 REST 或 RPC,原理都是相同的。
- GraphQL 查詢操作根據伺服器的當前狀態返回資料。預計隨著時間的推移請求具有特定輸入的查詢可能會返回不同的資料作為輸出,反映服務當前狀態的變化。
- 所有 GraphQL 變異操作都必須在名為 的引數中包含操作識別符號作為輸入transactionId。兩個具有相同transactionId值的請求表示請求是重複的。客戶端必須將識別符號生成為隨機 UUIDv4值。
- 伺服器必須僅對特定transactionId值應用一次操作 ,即伺服器第一次收到transactionId尚未處理的請求時。
- 對具有特定transactionId值的 GraphQL 變異操作的響應 必須始終產生相同的邏輯輸出。如果伺服器成功處理了變更,則響應必須為所有具有相同transactionId 值的請求發出成功訊號。類似地,如果伺服器以失敗的方式完成處理,則對相同的所有響應都transactionId必須表示該失敗。特別是,成功響應可能包含反映資料當前狀態的輸出,但是當客戶端再次請求相同的更改(另一個更改可能已更改資料)時,該輸出可能會有所不同。
- transactionId必須按原樣將相同的值傳遞給相關服務。
這些原則同樣適用於公共 API 和內部 API。
除了第一個原則,我會一一介紹這些原則,它應該是自給自足的。
第二個原則可以區分兩個請求並判斷它們是否出於相同的目的,即使輸入的有效載荷是相同的。
詳細點選標題
相關文章
- Java中的請求冪等性處理:如何確保服務端的操作重複安全Java服務端
- 如何使POST請求具有冪等性防止重複提交 - mscharhag
- 介面服務中的冪等性設計和防重保證,詳細分析冪等性的幾種實現方法
- gRPC重試與介面冪等性RPC
- MySQL中的冪等複製分析MySql
- 架構設計 | 介面冪等性原則,防重複提交Token管理架構
- Rabbitmq消費者冪等性(不重複消費)MQ
- 服務冪等以及常用實現方式
- 日常Bug排查-Nginx重複請求?Nginx
- 重複的ajax請求讓人很受傷
- 併發請求的重複插入問題
- 冪等性問題
- Spring Cloud Zuul API服務閘道器之請求路由SpringCloudZuulAPI路由
- 聊聊開發中冪等性問題
- 什麼是冪等性?四種介面冪等性方案詳解!
- 在 ASP .NET Core 中實現冪等 REST APIRESTAPI
- [java]如何裂解RESTful的冪等性JavaREST
- 什麼是分散式系統中的冪等性分散式
- 技術分享:如何避免ajax重複請求?
- 前端傳送的請求,是如何請求到後端服務的?前端後端
- python 使用 retrying 重試請求Python
- .NET Core使用 CancellationToken 取消API請求API
- 介面冪等性如何實現?
- 分散式之介面冪等性分散式
- 介面冪等性解決方案
- Vue路由切換 & Axios介面取消重複請求Vue路由iOS
- 在後端中如何實現冪等和去重?後端
- SSRF 服務端請求偽造服務端
- 使用Java Stream API中DistinctBy刪除重複資料JavaAPI
- 【Java面試】什麼是冪等?如何解決冪等性問題?Java面試
- 訊息佇列-如何保證訊息的不被重複消費(如何保證訊息消費的冪等性)佇列
- SpringBoot自定義註解+AOP+redis實現防介面冪等性重複提交,從概念到實戰Spring BootRedis
- 騰訊二面:如何保證介面冪等性?高併發下的介面冪等性如何實現?
- 02 RESTFul介面和HTTP的冪等性分析RESTHTTP
- 如何保證介面的冪等性?
- HTTP呼叫超時咋辦?重複請求又如何?HTTP
- fastHttp服務端處理請求的過程ASTHTTP服務端
- Nacos - 服務端處理心跳請求服務端