接口幂等性token(idempotency-key)是客户端生成的全局唯一、一次一用字符串,用于标识业务请求,后端据此去重并缓存结果;fetch需手动注入该key,配合后端校验才生效。

fetch 本身不提供幂等性或 Token 注入能力,需要你手动在请求头中携带防重放 Token(如 Idempotency-Key),并配合后端逻辑共同实现幂等性。关键不是“用 fetch 做什么”,而是“怎么构造符合幂等要求的请求”。
什么是接口幂等性 Token?
幂等性 Token(常叫 Idempotency-Key)是一个由客户端生成、全局唯一、一次一用的字符串,用于标识某次业务请求。后端收到带该 Key 的请求时:
- 若首次处理,正常执行并持久化记录(Key → 结果)
- 若已存在该 Key 的成功响应,则直接返回缓存结果,不重复执行业务逻辑
- 若 Key 已存在但处理失败(如超时),需按策略决定是否重试或拒绝
它不是认证 Token,不用于鉴权,而是防重复提交的核心标识。
用 fetch 注入 Idempotency-Key 的推荐方式
每次调用 fetch 前动态生成 Key,并通过 headers 注入。建议封装一个幂等请求函数:
- 使用 crypto.randomUUID()(现代浏览器)或 Date.now() + Math.random()(兼容旧版)生成唯一 Key
- Key 最好带业务上下文,比如 `user-create-${Date.now()}-${Math.random().toString(36).substr(2, 8)}`
- 确保同一业务操作(如“提交订单”)始终复用同一个 Key —— 不是每次 fetch 都新生成,而是操作开始时生成、成功/失败后丢弃
- 设置请求头:headers: { 'Idempotency-Key': key }
简单封装示例
```js
async function idempotentFetch(url, options = {}) {
const key = options.idempotencyKey || crypto.randomUUID();
const headers = new Headers(options.headers || {});
headers.set('Idempotency-Key', key);
return fetch(url, {
...options,
headers
});
}
// 使用
idempotentFetch('/api/orders', {
method: 'POST',
body: JSON.stringify({ items: [...] })
});
```
注意事项与常见坑
- 不要在 GET 请求上加 Idempotency-Key:GET 本应幂等,加 Key 可能被后端忽略或报错;幂等设计主要针对 POST/PUT/PATCH
- Key 生命周期要管理:前端需记住“这个 Key 对应哪次操作”,避免用户连点触发多个不同 Key 的请求
- 后端必须配合**才有效**:仅前端加 Key 没意义,服务端需校验、去重、结果缓存,且缓存时间需合理(如 24 小时)
- 网络错误时可重试,但必须复用原 Key:不能因 fetch 失败就重新生成 Key 再发,否则后端视为新请求
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











