当前位置:首页 > 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分钟内)及签名是否匹配。超过时间窗口的请求自动失效。

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

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

幂等性设计

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

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('请求过于频繁');
}

数据库乐观锁

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

PHP接口防重推荐实现

// 更新时带版本条件
$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
分享给朋友:

相关文章

vue3中实现接口轮询

vue3中实现接口轮询

使用 setInterval 实现基础轮询 在 Vue 3 中,可以通过 setInterval 定时调用接口。在组件的 onMounted 钩子中启动轮询,并在 onUnmounted 钩子中清除定…

vue实现接口配置

vue实现接口配置

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

vue实现翻译接口

vue实现翻译接口

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

php接口怎么实现

php接口怎么实现

PHP 接口实现方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体实现。接口通过 interface 关键字定义,类通过 implements 关键字实现接口。 定…

php接口实现

php接口实现

PHP接口实现方法 定义接口 使用interface关键字定义接口,接口中只能包含抽象方法和常量。接口方法必须是公开的,且不包含具体实现。 interface LoggerInterface {…

php中实现接口

php中实现接口

接口的定义与实现 在PHP中,接口(Interface)是一种抽象类型,用于定义一组方法的规范而不包含具体实现。类通过实现(implements)接口来遵循这些规范。 接口的定义语法: inter…