大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。
图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!
文章目录
- 摘要
- 引言
- 用 Python 快速实现接口监控
- 读取接口列表
- 核心脚本实现
- 代码解析
- 示例输出
- 用 Shell 脚本实现极简版本
- 核心逻辑
- 应用场景举例
- 场景一:服务上线前的批量验证
- 场景二:定时健康检查
- 场景三:上线后灰度验证
- QA 环节
- 总结
摘要
在日常运维和开发工作中,我们经常会遇到这样一个问题:系统上线之后,需要验证几十甚至上百个接口是否都能正常访问。手动一个一个去点、去测,不仅效率低,而且容易漏掉关键接口。特别是在微服务架构下,接口数量庞大,接口的健康状况直接决定了服务是否稳定。
本文将介绍如何通过 Python 和 Shell 脚本快速实现接口监控,自动读取接口列表,批量检测接口返回状态和耗时,并最终生成一份清晰的可视化报告(支持 Markdown 或 HTML 格式)。这样你就能在最短时间内确认接口是否健康,而不是盯着浏览器或 Postman 一次次重复操作。
引言
随着微服务、API 网关、容器化部署的普及,一个完整的应用系统可能依赖几十个甚至上百个 REST API 接口。每次上线之后,团队都要花费时间确认接口是否正常响应,尤其是在跨环境(开发、测试、生产)部署时,这种验证工作不可或缺。
传统做法是开发手工用浏览器打开、用 Postman 点接口,或者通过 curl 一条条执行。这种方式效率很低,而且不可持续。理想的方式应该是:
- 批量读取接口地址
- 自动检测接口是否存活、返回码和响应时间
- 把结果生成报告,一目了然
接下来,我们就来一步步构建一个这样的轻量化解决方案。
用 Python 快速实现接口监控
读取接口列表
通常我们会把接口集中放在一个文本文件里,比如 urls.txt
:
https://api.example.com/health
https://api.example.com/v1/user
https://api.example.com/v1/order
每一行代表一个待检测的接口。
核心脚本实现
下面的 Python 脚本使用 requests
来检测接口,记录返回的状态码和耗时,并把结果写入一个 Markdown 报告文件。
import requests
import time
from datetime import datetimedef check_url(url):try:start = time.time()response = requests.get(url, timeout=5)duration = round((time.time() - start) * 1000, 2) # 毫秒return response.status_code, durationexcept Exception as e:return None, Nonedef main():# 读取接口列表with open("urls.txt", "r") as f:urls = [line.strip() for line in f if line.strip()]# 生成报告文件report_name = f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"with open(report_name, "w") as report:report.write("| URL | Status | Response Time (ms) |\n")report.write("| --- | ------ | ------------------ |\n")for url in urls:status, duration = check_url(url)if status:report.write(f"| {url} | {status} | {duration} |\n")else:report.write(f"| {url} | Error | - |\n")print(f"接口检测完成,结果保存在 {report_name}")if __name__ == "__main__":main()
代码解析
check_url
:负责单个接口检测,返回状态码和耗时。urls.txt
:统一管理所有待检测接口。report_xxx.md
:自动生成 Markdown 格式的检测结果,方便阅读或上传到 GitLab/GitHub。
示例输出
| URL | Status | Response Time (ms) |
| --- | ------ | ------------------ |
| https://api.example.com/health | 200 | 120.35 |
| https://api.example.com/v1/user | 200 | 220.11 |
| https://api.example.com/v1/order | Error | - |
用 Shell 脚本实现极简版本
有些时候,Python 环境不方便直接部署,这时可以用一个简单的 Shell 脚本加 curl
来实现:
#!/bin/bashinput="urls.txt"
output="report_$(date +%Y%m%d_%H%M%S).md"echo "| URL | Status | Time (ms) |" > $output
echo "| --- | ------ | --------- |" >> $outputwhile IFS= read -r url
doif [ -n "$url" ]; thenstart=$(date +%s%3N)status=$(curl -o /dev/null -s -w "%{http_code}" "$url")end=$(date +%s%3N)duration=$((end-start))if [ "$status" -eq 200 ]; thenecho "| $url | $status | $duration |" >> $outputelseecho "| $url | $status | $duration |" >> $outputfifi
done < "$input"echo "接口检测完成,结果保存在 $output"
核心逻辑
- 用
curl
获取接口响应状态码。 - 计算时间差作为响应时长。
- 输出 Markdown 格式结果。
应用场景举例
场景一:服务上线前的批量验证
开发完成后要上线新版本,可以先在测试环境跑一遍检测脚本,确保所有接口返回 200,再推进到生产。
示例:
python check_api.py
得到报告后,可以快速交给 QA 或运维确认。
场景二:定时健康检查
通过 cron
或 CI/CD 配合脚本定时执行,把接口状态报告每天生成一次。
这样可以快速发现某个接口挂掉的情况,而不是等用户反馈。
示例 crontab -e
配置:
0 * * * * python /home/user/check_api.py
表示每小时执行一次。
场景三:上线后灰度验证
在灰度发布过程中,可以只把部分接口地址放进 urls_gray.txt
,运行检测脚本,快速确认新版本健康。
QA 环节
Q1:能不能直接生成 HTML 报告?
可以。把 Markdown 转换成 HTML 非常容易,Python 中可以用 markdown
库,或者直接输出 HTML 表格。
Q2:如果接口需要鉴权怎么办?
可以在 requests.get()
或 curl
中加上 Header,比如带上 Token。
Q3:能不能同时检测并发请求?
完全可以,用 Python 的 concurrent.futures
或者 asyncio
实现异步检测,可以大幅度提升检测速度。
总结
本文展示了如何用 Python 和 Shell 脚本快速实现一套接口监控方案,解决了部署后需要手动逐一验证接口的问题。方案的关键点在于:
- 接口集中管理,批量检测。
- 检测结果可视化(Markdown/HTML)。
- 可结合 CI/CD 或定时任务,实现自动化。
这种方案非常适合微服务架构下的日常运维,既轻量又实用,不需要额外引入复杂的监控平台,就能在第一时间发现接口问题。