请求结果
发送到 FourA API 的每个 request 都会被归类为唯一的一种 outcome。该 outcome 在 request 时计算一次,并记录在您的 API key 下。您的 dashboard、activity feed 和 billing 都读取同一个字段。
只有 success 是计费的。
七种 Outcome
| Outcome | Layer | 含义 |
|---|---|---|
success |
n/a | 交付了有效的 response。计入您的计费额度。 |
application_error |
target | 目标返回了 HTTP 200,但 body 中包含 error 字段。 |
application_fail |
target | 目标返回了非 2xx 状态码且未被您的 validate 规则接受,或者完全没有 response。 |
client_error |
caller | 您的 request 在离开 FourA 之前被拒绝。参数错误、proxy 值格式错误、受 SSRF 保护的 URL。 |
rate_limit |
FourA | 达到了您的 RPM 或并发限制。 |
service_error |
FourA | 后端返回了 5xx,或者其 body 不是有效的 JSON。 |
service_fail |
FourA | 网络故障:超时、连接被拒绝、DNS 错误、客户端断开连接。 |
layer 列说明了责任归属:
- target outcome 与您调用的网站有关。您的 request 成功到达 FourA,且 FourA 成功到达目标网站。目标网站本身返回了错误。
- caller outcome 意味着您的 request 根本没有执行机会。请修正 request 的格式。
- FourA outcome 是我们的问题。请重试,如果问题持续存在,请检查 status page。
目标网站返回 403 属于 application_fail,而不是 client_error。您的调用格式正确,只是该网站拒绝了访问。
Success 关联 validate
在没有 validate 的情况下,只有当目标返回 HTTP 200 时,API 才会将 request 标记为 success。
使用 validate 时,success 将遵循您声明的规则。如果您告诉 API 对于给定的 request,200 和 403 都是可以接受的,那么 403 将作为 success 返回。您收到的 body 仍保持不变。
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://target.example/feed",
"validate": {
"status": { "accept": [200, 403] }
}
}'
在此调用中,403 response 将被视为 success 并作为一个 request 计费。500 response 将被视为 application_fail 且不计费。
相同的逻辑也适用于 validate.headers 和 validate.data。无论 HTTP 状态如何,引擎根据您的规则接受的任何 response 都会作为 success 返回。
计费影响
| Outcome | 是否计费 | 是否计入额度 |
|---|---|---|
success |
是 | 是 |
application_error |
否 | 否 |
application_fail |
否 | 否 |
client_error |
否 | 否 |
rate_limit |
否 | 否 |
service_error |
否 | 否 |
service_fail |
否 | 否 |
只有成功交付您请求的数据的 request 才会收费。FourA 侧、目标网站侧或您自身侧的失败均不计费。
在 Dashboard 中查看 Outcome
您的 API key 发起的每个 request 都会显示在 Activity feed 中,并带有其 outcome 标签。Metrics 和 Overview 页面会聚合相同的字段,用于生成环形图和时间线。
当您按 outcome 筛选 Activity 时,还可以专注于单个产品(Single、Proxy、Browser),以查看某类失败是否仅针对特定 endpoint。
重试策略
基于 outcome 的初步重试策略:
| Outcome | 安全重试? | 何时重试 |
|---|---|---|
success |
n/a | 您已获取 response。 |
application_error |
有时 | 读取目标的 error body。部分是瞬时的,大多数不是。 |
application_fail |
有时 | 如果目标对您进行 rate-limiting,请放慢速度。如果它阻止了您,请切换到 Proxy 或 Browser endpoint。 |
client_error |
否 | request 将以相同的方式再次失败。请修正输入。 |
rate_limit |
是 | 遵循 response body 中的 retryAfter。 |
service_error |
是 | 采用短暂的指数退避。 |
service_fail |
是 | 与 service_error 相同。 |
相关内容
- API Errors:HTTP 级别的 error response
- Rate Limits:触发
rate_limit的原因 - Metrics:查看 outcome 细分的地方
- Activity Log:单次 request 的 outcome 历史记录