当前位置:首页 > PHP

PHP接口防重推荐实现

2026-01-29 06:35:12PHP

防重实现方法

使用唯一请求标识符(UUID或业务ID)作为防重依据,客户端每次请求生成唯一标识,服务端校验该标识是否已处理过。适合短时间内的重复请求拦截。

// 客户端生成唯一标识
$requestId = uniqid('req_', true);

// 服务端校验逻辑
$cacheKey = 'api_request:'.$requestId;
if ($redis->exists($cacheKey)) {
    throw new Exception('重复请求');
}
$redis->setex($cacheKey, 60, 1);

时间戳+签名验证

客户端将当前时间戳与请求参数拼接后生成签名,服务端验证时间戳有效性(如5分钟内)及签名是否匹配。超过时间窗口的请求自动失效。

PHP接口防重推荐实现

// 客户端生成签名
$timestamp = time();
$sign = md5($timestamp . $params . $secretKey);

// 服务端验证
if (abs(time() - $timestamp) > 300) {
    throw new Exception('请求已过期');
}
if ($sign !== md5($timestamp . $params . $secretKey)) {
    throw new Exception('签名错误');
}

幂等性设计

对于写操作接口,采用天然幂等设计。如订单创建使用唯一订单号,重复提交返回已存在的订单数据。数据库层面通过唯一索引约束防止重复数据。

PHP接口防重推荐实现

ALTER TABLE orders ADD UNIQUE INDEX uk_order_no (order_no);

令牌桶限流

使用Redis实现令牌桶算法,控制单位时间内接口调用次数。适用于防止高频重复调用场景。

$rateLimiter = new TokenBucket(
    redis: $redis,
    key: 'api_rate_limit:user_123',
    capacity: 10,
    tokens: 10,
    fillRate: 1
);

if (!$rateLimiter->consume(1)) {
    throw new Exception('请求过于频繁');
}

数据库乐观锁

更新操作时通过版本号控制,确保数据变更的原子性。适合防止并发重复提交导致的数据不一致。

// 更新时带版本条件
$affected = $db->execute(
    'UPDATE products SET stock = stock - 1, version = version + 1 
     WHERE id = ? AND version = ?',
    [$productId, $currentVersion]
);

if ($affected === 0) {
    throw new Exception('库存更新冲突');
}

标签: 接口PHP
分享给朋友:

相关文章

vue调用接口实现退出

vue调用接口实现退出

Vue 调用接口实现退出功能 在 Vue 中实现退出功能通常需要调用后端接口,清除用户登录状态,并跳转到登录页面或其他指定页面。以下是实现步骤: 定义退出接口方法 在 Vue 项目中,通常会在 s…

vue实现接口连接

vue实现接口连接

Vue 实现接口连接的步骤 安装 Axios Axios 是一个基于 Promise 的 HTTP 客户端,适用于浏览器和 Node.js 环境。通过以下命令安装: npm install ax…

java如何写接口

java如何写接口

定义接口 在Java中,使用interface关键字定义接口。接口可以包含抽象方法、默认方法、静态方法和常量(隐式为public static final)。 public interface…

php实现支付宝接口

php实现支付宝接口

支付宝接口集成方法 在PHP中实现支付宝接口需要完成以下几个关键步骤。支付宝官方提供了多种接口类型,如即时到账、手机网站支付、APP支付等,以下以即时到账接口为例说明。 准备工作 注册支付宝企业账…

vue实现接口配置

vue实现接口配置

Vue 中实现接口配置的方法 在 Vue 项目中配置接口通常涉及以下几个关键步骤: 创建 API 配置文件 新建一个 api 目录,创建 index.js 文件作为接口配置入口。可以将接口按模块分类…

vue实现翻译接口

vue实现翻译接口

使用 Vue 实现翻译接口 安装 Axios 在 Vue 项目中安装 Axios 用于发送 HTTP 请求: npm install axios 配置翻译服务 选择一个翻译 API 服务,例如 Go…