SuperAPI AI 工具集

req-http-client

编程与开发

查看项目

更新于 10-15 22:16

技能介绍

用途:在 Elixir 应用中发起 HTTP 请求,集成外部 API 之前使用,规范 Req 客户端的搭建与调用方式。

主要能力与规则:用 Req.new/1 一次性构建带 base_url、receive_timeout 和默认请求头的基客户端并复用;应用代码使用非 bang 的 Req.get/1、Req.post/1,模式匹配 {:ok, %{status: _, body: _}} 与 {:error, _},bang 版本仅用于脚本和测试;显式区分 404、429 与 status >= 500,不要把所有非 200 合并为一个分支;重试只对幂等请求启用 retry: :transient,Req 会对 5xx 和网络错误做退避重试,非幂等写请求不要盲目重试;必须设置显式 receive_timeout;测试中用 Req.Test 桩住所有外部调用;大响应使用 into: 流式写入 File.stream!/1 或回调,避免整包加载内存。

使用方式:在 mix.exs 添加依赖 {:req, "~> 0.5"},运行 mix deps.get;创建配置好的客户端模块,例如用 Req.new(base_url: ..., headers: [{"authorization", "Bearer ..."}], receive_timeout: 30_000, retry: :transient) 构建基请求,再通过 url: "/users/#{id}" 调用;调用后用 case 匹配状态码并映射为 {:ok, body} 或 {:error, :not_found}、{:error, :rate_limited}、{:error, :server_error} 等;发送 JSON 用 json:,表单用 form:。

测试与验证:用 Req.Test.adapter/1 与 Req.Test.stub/2 编写 ExUnit 测试,先跑 mix test 确认桩通过,再用 IEx 对真实端点验证返回 {:ok, body}。

限制与说明:示例中的 base_url、url 和 https://api.example.com 均为占位符,不要提交真实主机密钥;令牌应从 Application.get_env/2 或运行时配置读取,不要硬编码在客户端模块。文档未提供具体支持平台、收费或价格信息。