??大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括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 或定時任務,實現自動化。
這種方案非常適合微服務架構下的日常運維,既輕量又實用,不需要額外引入復雜的監控平臺,就能在第一時間發現接口問題。