SuperAPI AI 工具集

reqwest

编程与开发

查看项目

更新于 10-15 20:32

技能介绍

用途:在 Rust 项目中用 reqwest 发起出站 HTTP 请求,重点是在 Axum/Tokio 服务里集成第三方 API、webhook 等场景,避免每次请求新建客户端带来的无连接池、无超时问题。

主要能力与规则:Client 在启动时创建并放入 AppState(或二进制中的 OnceLock),克隆成本低;在 builder 上设置 connect_timeout 与总 timeout,避免永久挂起;仅对网络错误、429、5xx 做带退避和上限的重试,业务 4xx 不重试;JSON 使用 serde 类型,非 2xx 状态映射为 AppError,而不是对 json().await 直接 unwrap;日志中不得记录含 token/PII 的 body。

用法要点:示例中通过 reqwest::Client::builder().timeout(...).connect_timeout(...).user_agent(...).build() 构建客户端;TLS 使用默认配置,生产环境不要关闭校验;HTTP/2 保持 crate 默认;重定向需限制,若 URL 来自用户输入要防范 SSRF(私有 IP)。在 Axum handler 中通过 State 取用 client,用 error_for_status 或显式 match 处理状态码,签名校验用 bytes() 取原始 body。取消请求时 future 被 drop 会取消 I/O。

适用场景:第三方 API 集成、webhook 出站调用、需要超时与重试控制的 Rust 服务。

限制与注意:幂等请求(GET、带 idempotency-key 的 PUT)才适合重试,支付类 POST 不应盲目重试;熔断仅在仓库已有实现时使用;慢速扇出应交给 background-jobs;避免在循环中使用 reqwest::get、在热路径 expect、对 400/409 重试、未用 serde 就信任 Content-Type、在 handler 中重配全局可变 Client。具体依赖版本、平台与收费信息暂未提供。