
实用 API 除錯闭环:OpenAPI、Postman、HAR、jq 与 JSONPath
一篇更完整的 API 除錯教程,串起 OpenAPI 时序預覽、Postman 請求順序、HAR 瀑布流、jq/JSONPath 欄位提取和 HTTP 回應头檢查。
真實問題不是一个图能解决的
API 問題通常不只存在于一个文件里。OpenAPI 契約写的是一种行为,Postman 集合里可能是另一种請求順序,浏览器 HAR 又暴露了慢請求、重定向或第三方脚本。
所以这篇文章应该像一条除錯链路,而不是单纯介绍某个在线工具:先看契約,再看請求順序,再看浏览器网络瀑布流,最后用 jq 或 JSONPath 提取证据。

Demo 1:先从 OpenAPI 契約確認分支
很多线上問題不是 200 分支没写,而是 401、409、422、429 这些錯誤分支没人维护。先粘贴一个小的 OpenAPI 片段,比直接丢整个 spec 更容易定位。
預覽时重点看:接口是否有关键錯誤回應、錯誤码是否和前端处理一致、是否遗漏重试或幂等分支。
paths:
/orders:
post:
summary: Create order
responses:
"201":
description: Created
"409":
description: Duplicate payment intent
"422":
description: Invalid cart stateDemo 2:用 Postman 集合檢查真實請求順序
Postman 集合更接近人工测试路径。契約可能是对的,但集合可能还在调用旧接口,或者漏了购物车校验、鉴权刷新这类中间步骤。
这个 demo 的目标不是画漂亮图,而是快速回答:請求順序是否符合真實產品流程。
{
"item": [
{"name": "Login", "request": {"method": "POST", "url": "https://api.example.com/auth/login"}},
{"name": "Validate cart", "request": {"method": "POST", "url": "https://api.example.com/cart/validate"}},
{"name": "Create order", "request": {"method": "POST", "url": "https://api.example.com/orders"}}
]
}Demo 3:HAR 里看慢請求和第三方影响
HAR 是浏览器视角的事实记录。它能告诉你:頁面慢到底是接口慢、静态资源慢、第三方脚本慢,还是某个 4xx/5xx 被前端吞掉了。
建议先截取最慢的几条 entry 做預覽,而不是把完整生产 HAR 丢进 Issue。
{
"log": {
"entries": [
{"time": 92, "request": {"method": "GET", "url": "https://app.example.com/checkout"}, "response": {"status": 200}},
{"time": 1280, "request": {"method": "POST", "url": "https://api.example.com/orders"}, "response": {"status": 201}},
{"time": 430, "request": {"method": "GET", "url": "https://analytics.example.net/tag.js"}, "response": {"status": 200}}
]
}
}Demo 4:用 jq 和 JSONPath 提取证据欄位
回應体很大时,不要让读者翻完整 payload。用 jq 或 JSONPath 抽出錯誤码、订单 ID、duration、retryCount 这些关键欄位。
jq 更适合转换 JSON,JSONPath 更像选择器,适合写进测试、监控和文件範例。
jq: .errors[].code
JSONPath: $.errors[*].code
{
"errors": [
{"code": "CART_EXPIRED", "message": "Cart was updated"},
{"code": "PAYMENT_RETRY_REQUIRED", "message": "Retry with a new intent"}
]
}这条链路能发现哪些常见坑
Postman 集合仍然调用废弃接口;OpenAPI 只写了 201 和 500,却漏了前端每天遇到的 409;HAR 显示后端其实很快,真正慢的是第三方脚本;回應头缓存策略导致浏览器一直拿旧 schema。
这些具体錯誤案例,才是博客内容和普通工具頁拉开差距的地方。
發布除錯记录前的 checklist
至少保留一个契約片段、一个請求順序截图、一个 HAR 时间线截图、一个欄位提取範例。說明資料来自本地、测试環境还是生产環境。
截图用于快速阅读,源码用于重現。两者一起放进 PR、Issue 或博客里,可信度会高很多。