幂等性 (Idempotency) 是指同一操作执行一次和执行多次的结果完全相同的特性。数学表达为 f(f(x)) = f(x)。在 Web API 设计中,这是防止网络故障或超时导致重试时产生重复处理的重要概念。
HTTP 方法的幂等性在规范中有明确定义。GET、PUT、DELETE 是幂等的 (无论执行多少次结果相同),POST 是非幂等的 (每次执行可能创建新资源)。
在短链接服务的 API 设计中,幂等性是核心课题。对同一 URL 发送两次缩短请求时,应该生成两个不同的短链接,还是返回同一个短链接?幂等设计下,相同输入始终返回相同的短链接。这样即使因网络错误而重试,也不会生成重复的短链接。
实现幂等性的常见手法是使用 Idempotency Key (幂等键)。客户端在请求中附加唯一键 (如 UUID),服务器缓存该键对应的处理结果。当收到相同键的请求时,不再重新处理而是直接返回缓存结果。Stripe 的支付 API 是这一手法的典型代表。
短链接服务中的幂等性实现通常结合 URL 规范化。对输入 URL 进行规范化后计算哈希值,相同哈希值返回相同的短码。这样 "https://example.com/page" 和 "https://example.com/page/" 就会映射到同一个短链接。相关书籍可在 Amazon 上查阅。