You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求对API路径数组进行相似字符串聚类并按模板汇总数值

API路径聚类与计数汇总实现

给定如下格式的API路径计数数组:

{
  "/core/api/v2.0/wallet/62da5521930eaf0f2e855": 1,
  "/core/api/v2.0/wallet/62da382894c5dd0f9ab11": 1,
  "/core/api/v2.0/users/sync/603a9c6a-c686-42af-b5f7-1f5bcfd75": 1,
  "/core/api/v2.0/users/sync/64c73c5b-e6cc-4f98-9c54-69e7c796a": 3,
  "/core/api/v2.0/users/sync/c3dfe00d-3950-401b-b068-d64aac99f39c": 3,
  "/core/api/v2.0/users/sync/32cd70c8-ca92-4075-bb2f-1b9d99527723": 2,
  "/core/api/v2.0/users/sync/245b0029-c05b-4007-bacb-656db21c170e": 1,
  "/core/api/v2.0/users/sync/9175d6a9-386c-4b0d-9db4-c6053913c354": 1,
  "/core/api/v2.0/tools/generate/trigger-download": 22,
  "/core/api/v2.0/tools/generate/search-photos": 17
}

需要将路径中的唯一标识替换为占位符并汇总计数,期望结果:

{
  "/core/api/v2.0/wallet/:id": 2,
  "/core/api/v2.0/users/sync/:id": 11,
  "/core/api/v2.0/tools/generate/:tool-name": 39
}

实现代码

function clusterAPIPaths(apiCounts) {
  const clustered = {};
  
  // 判断是否为唯一标识的辅助函数
  function isUniqueId(segment) {
    const uuidPattern = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;
    const longRandomPattern = /^[0-9a-f]{16,}$/i;
    return uuidPattern.test(segment) || longRandomPattern.test(segment);
  }
  
  // 遍历处理每个API路径
  for (const [path, count] of Object.entries(apiCounts)) {
    const segments = path.split('/').filter(s => s);
    let normalizedSegments = [...segments];
    const lastSegment = normalizedSegments.at(-1);
    
    // 替换唯一标识为对应占位符
    if (isUniqueId(lastSegment)) {
      const prefix = normalizedSegments.slice(0, -1).join('/');
      if (prefix.includes('/tools/generate/')) {
        normalizedSegments[normalizedSegments.length - 1] = ':tool-name';
      } else {
        normalizedSegments[normalizedSegments.length - 1] = ':id';
      }
    }
    
    const normalizedPath = '/' + normalizedSegments.join('/');
    // 累加计数
    clustered[normalizedPath] = (clustered[normalizedPath] || 0) + count;
  }
  
  return clustered;
}

// 测试示例
const input = {
  "/core/api/v2.0/wallet/62da5521930eaf0f2e855": 1,
  "/core/api/v2.0/wallet/62da382894c5dd0f9ab11": 1,
  "/core/api/v2.0/users/sync/603a9c6a-c686-42af-b5f7-1f5bcfd75": 1,
  "/core/api/v2.0/users/sync/64c73c5b-e6cc-4f98-9c54-69e7c796a": 3,
  "/core/api/v2.0/users/sync/c3dfe00d-3950-401b-b068-d64aac99f39c": 3,
  "/core/api/v2.0/users/sync/32cd70c8-ca92-4075-bb2f-1b9d99527723": 2,
  "/core/api/v2.0/users/sync/245b0029-c05b-4007-bacb-656db21c170e": 1,
  "/core/api/v2.0/users/sync/9175d6a9-386c-4b0d-9db4-c6053913c354": 1,
  "/core/api/v2.0/tools/generate/trigger-download": 22,
  "/core/api/v2.0/tools/generate/search-photos": 17
};

console.log(clusterAPIPaths(input));

实现思路

  1. 唯一标识识别:通过正则匹配UUID格式(含连字符/不含)和长随机字符串,判断路径最后一段是否为唯一标识
  2. 路径标准化:根据路径前缀替换唯一标识为对应占位符(工具类路径用:tool-name,其余用:id)
  3. 计数汇总:以标准化后的路径为键,累加所有同类型路径的访问计数

内容的提问来源于stack exchange,提问作者Talha nousher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:54:20