avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home APISIX Mocking 插件实践:接口 Mock、临时降级与兜底响应
文章

APISIX Mocking 插件实践:接口 Mock、临时降级与兜底响应

Posted 2023-04-7 Updated 3 days ago
By Ryan Chen
13~16 min read

APISIX 的 mocking 插件可以让网关直接返回模拟响应,而不再把请求转发到真实上游服务。它常用于开发联调、接口临时兜底、故障演练和简单降级场景。

需要注意:mocking 插件不是完整意义上的熔断器。真正的熔断治理通常还需要结合限流、超时、健康检查、故障检测、fallback、告警和发布流程。mocking 更适合“我明确知道这个接口要临时返回一个固定响应”的场景。

相关系列文章:

  • APISIX 入门指南:核心概念、Docker 部署与基础路由配置
  • APISIX Dashboard 使用指南:路由、服务、上游与插件配置实践

适用场景

mocking 插件适合:

  • 后端接口尚未开发完成,前端需要联调。
  • 第三方接口异常,临时返回兜底数据。
  • 大促或故障期间,对非核心接口返回简化响应。
  • 压测或演示环境中模拟固定结果。
  • 对某些接口进行临时降级。

不适合:

  • 复杂业务补偿。
  • 需要按用户、订单、状态动态计算响应。
  • 需要完整熔断状态机的场景。
  • 强一致交易链路。

配置入口

可以通过 Admin API 配置,也可以通过 APISIX Dashboard 可视化配置。

Dashboard 操作路径通常是:

路由 / 服务 -> 插件配置 -> mocking -> 启用 -> 填写配置 -> 提交

原操作截图如下:

进入插件配置

启用 Mocking 插件

配置示例

示例:返回一个固定 JSON 响应。

{
  "content_type": "application/json",
  "delay": 0,
  "response_status": 200,
  "response_example": "{\"code\":0,\"data\":[],\"msg\":\"操作成功\"}",
  "with_mock_header": false
}

参数说明:

参数 说明
content_type 响应 Content-Type,例如 application/json
delay 模拟响应延迟,单位以官方文档为准
response_status 返回 HTTP 状态码
response_example 返回的响应体内容
with_mock_header 是否在响应头中增加 mock 标识

旧配置中可能出现 disable 字段。实际使用时建议以当前 APISIX 官方文档的插件 Schema 为准,避免因版本差异导致配置不生效。

Admin API 示例

给某个路由启用 mocking:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/mock-demo" \
  -H "X-API-KEY: your-admin-key" \
  -X PUT \
  -d '{
    "uri": "/mock/users",
    "plugins": {
      "mocking": {
        "content_type": "application/json",
        "response_status": 200,
        "response_example": "{\"code\":0,\"data\":[],\"msg\":\"mock success\"}",
        "with_mock_header": true
      }
    },
    "upstream": {
      "type": "roundrobin",
      "nodes": {
        "127.0.0.1:1980": 1
      }
    }
  }'

访问验证:

curl -i "http://127.0.0.1:9080/mock/users"

如果返回配置的 JSON,说明 mock 已生效。

与熔断降级的边界

很多人会把 mocking 当成“熔断降级”,但它们有边界差异:

能力 mocking 插件 完整熔断降级
固定响应 支持 支持
根据故障率自动打开 不负责 通常支持
半开探测 不负责 通常支持
动态恢复 需要人工或外部系统配置 通常自动
适用场景 临时兜底、联调 Mock 高可用治理

因此,生产中可以把 mocking 作为兜底手段,但不要把它当成完整的故障治理方案。

生产使用建议

  1. 明确启用范围

    • 优先绑定到具体 Route,不要随意全局启用。
  2. 控制响应内容

    • 不要返回误导调用方的“假成功”,特别是交易、支付、库存类接口。
  3. 设置变更记录

    • 记录谁在什么时候对哪个接口启用了 mock。
  4. 设置恢复时间

    • 临时降级要有恢复计划,避免长期遗留。
  5. 结合告警

    • 启用 mock 期间应有监控和告警,避免业务长期处于降级状态。

常见问题

1. 配置后仍然访问真实上游

检查:

  • 插件是否启用。
  • 插件绑定的是 Route、Service 还是其他层级。
  • 当前请求是否命中该 Route。
  • 是否存在优先级更高的路由。

2. 返回内容不是合法 JSON

检查:

  • response_example 是否是字符串。
  • 内部双引号是否正确转义。
  • content_type 是否设置为 application/json。

3. 不知道是否命中 mock

可以开启 with_mock_header,让响应头包含 mock 标识,方便调试和排查。

总结

APISIX mocking 插件很适合做接口 Mock 和临时兜底,但它不是完整的熔断治理系统。生产使用时要明确启用范围、记录变更、控制返回内容,并设置恢复计划。

参考资料

  • Apache APISIX mocking 插件官方文档
  • Apache APISIX Plugins
  • APISIX Dashboard 使用指南:路由、服务、上游与插件配置实践
指南
APISIX Mocking Mock 熔断降级 API网关 插件
License:  CC BY 4.0
Share

Further Reading

Jun 27, 2026

Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分

本文整理一套适合 Router Agent + Skill + Runtime 架构的设计原则:Agent 只负责业务决策,Runtime 统一负责执行、恢复、Trace、Checkpoint 和 Evidence,Business Script 只做确定性业务执行。

Sep 9, 2024

Redis 核心概念、数据结构与高可用架构详解

系统梳理 Redis 的核心数据类型、底层结构、过期与淘汰、持久化、事务、主从复制、Sentinel、Cluster、缓存一致性和分布式锁等机制,适合作为 Redis 学习、面试复习和高可用架构设计参考。

Sep 5, 2024

B+树原理与 MySQL InnoDB 索引机制解析

本文从 B+ 树的多叉平衡结构、叶子节点链表、范围查询和磁盘 I/O 特性出发,解释数据库索引为什么常采用 B+ 树,并结合 MySQL InnoDB 的聚簇索引、二级索引、回表、覆盖索引和联合索引机制理解其实际应用。

OLDER

APISIX Dashboard 使用指南:路由、服务、上游与插件配置实践

NEWER

Proxmox VE 安装 OpenWrt 软路由:镜像导入、网卡桥接与 IP 配置指南

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号