Skip to content

规则系统

规则让你声明"哪些请求需要什么治理",无需在每个请求处重复配置。

规则字段

字段类型说明
enabledboolean规则开关,设为 false 跳过该规则
urlstring | RegExp | Array | FunctionURL 匹配器
methodstring | RegExp | Array | Function请求方法匹配(单个)
methods同上请求方法匹配(多个)
match(config) => boolean自定义匹配函数
duplicateboolean | object | function匹配后的防重配置
retryboolean | object | function匹配后的重试配置
circuitBreakerboolean | object | function匹配后的熔断配置

匹配优先级

请求级配置(最高) > 规则匹配(首个命中项生效) > 全局默认(最低)

完整示例

javascript
const requestManager = setupRequestGuard(axios, {
  rules: [
    // ---- 字符串匹配 ----
    // 精确匹配 URL,所有方法都生效
    { url: '/api/order/submit', duplicate: { strategy: 'block' } },

    // ---- 正则匹配 ----
    // 所有 POST 请求且 URL 以 /submit 结尾的,开启防重
    { url: /\/submit$/, method: 'post', duplicate: true },

    // ---- 多方法匹配 ----
    // GET 和 POST 的查询接口使用 reuse 策略
    { url: /\/api\/(list|search|query)/, methods: ['get', 'post'], duplicate: { strategy: 'reuse' } },

    // ---- 函数式规则(动态返回配置) ----
    // 根据请求内容动态决定配置
    (config) => {
      if (config.url.includes('/api/payment')) {
        return { duplicate: { strategy: 'block', message: '支付处理中' } };
      }
      return null; // 不匹配返回 null
    },

    // ---- 自定义匹配器 ----
    // 带特定 header 的请求使用 block 策略
    {
      match: (config) => config.headers?.['X-Idempotent'] === 'true',
      duplicate: { strategy: 'block' }
    },

    // ---- 能力配置为函数(按请求动态返回) ----
    {
      url: /\/api\//,
      method: 'post',
      retry: (config, rule) => {
        // 幂等接口才开启重试
        if (config.headers?.['Idempotency-Key']) {
          return { attempts: 3, delay: 500 };
        }
        return false;
      }
    }
  ]
});

TIP

规则按声明顺序匹配,首个命中项生效,后续规则不再扫描。更具体的规则应写在更前面。

基于 MIT 许可发布