如何在Azure WebApp的.NET Core微服务API中识别未使用端点?
识别微服务仓库中未使用API端点的程序化方案
我负责一个从单体系统拆分而来的多微服务API项目,拆分时的操作导致多个代码仓库里有大量复制粘贴的未使用端点,结构示例如下:
# 单体时期目录 monolith/account/ monolith/payment/ monolith/order/ # 拆分后的微服务目录 微服务 : account monolith/account/ [已使用] monolith/payment/ [复制粘贴未使用] monolith/order/ [复制粘贴未使用] 微服务 : payment monolith/account/ [复制粘贴未使用] monolith/payment/ [已使用] monolith/order/ [复制粘贴未使用] 微服务 : order monolith/account/ [复制粘贴未使用] monolith/payment/ [复制粘贴未使用] monolith/order/ [已使用]
我们的API部署在Azure WebApp上,所有应用都启用了Application Insights,下面是程序化识别未使用端点的具体步骤:
1. 从Application Insights导出已使用端点清单
利用App Insights的Kusto查询,针对每个微服务对应的App Insights资源,抓取所有被调用过的API端点:
- 示例Kusto查询(根据你的API路径规则调整
parse逻辑):
requests | where cloud_RoleName == "account-service" // 替换为你的微服务名称 | parse url with * "/api/" endpoint // 匹配/api/后的端点路径 | summarize count() by endpoint | project endpoint
- 把每个微服务的查询结果导出成JSON或CSV,得到该服务的已使用端点清单。
2. 扫描代码仓库提取所有定义的端点
用工具扫描代码,提取所有在代码中定义的API端点:
- 如果是.NET Web API项目,用
dotnet list api命令就能快速导出所有API端点:
dotnet list api --project ./AccountService/AccountService.csproj --format json
也可以用Roslyn编写自定义分析器,精准提取控制器和Action的路由模板。
- 如果是Java/Spring项目,可以调用Spring Actuator的
/mappings端点获取运行时的路由,或者用静态代码扫描脚本提取@RequestMapping、@GetMapping等注解中的路径。 - 把扫描结果整理成结构化的清单,每个端点包含路径、所在文件等信息。
3. 对比清单找出未使用端点
写个脚本(Python、PowerShell都行)做对比:
- 加载已使用端点清单和所有定义的端点清单
- 找出那些在定义清单里,但从未出现在已使用清单中的端点
- 生成每个仓库的未使用端点报告,标注清楚端点路径和位置
4. 验证和自动化
- 对标记的未使用端点做抽样验证,比如拉长App Insights的查询时间范围(覆盖几周甚至几个月的业务周期),确保确实没有调用记录
- 把整个流程自动化:在Azure DevOps或GitHub Actions里加个定时任务,定期执行代码扫描、App Insights查询、对比分析,自动生成报告发出来
内容的提问来源于stack exchange,提问作者frictionlesspulley
相关产品推荐
相关产品推荐

