Skip to content

🍳 Cookbook 食谱

🖥 命令行也有食谱

本节是 Go SDK 库视角的实战方案。许多场景(日志增强、CSV 导出、批量查询、定时任务)用 CLI 一行命令就能搞定 —— 见 CLI 实战食谱

实战场景的完整代码方案。每个食谱解决一个具体问题。

🌐 地理路由与本地化

🛡 安全与风控

📊 数据与运维

⚡ 性能与异步

🎨 一图抵千言

食谱全集的端到端流程:一次请求从入口取出 IP,经 ipapi.Client 查询拿到 IPInfo,再按场景分流到风控、本地化、运维、异步四条下游。下方主图覆盖主链路;其后三张小图分别展开「边缘/代理」「gRPC 拦截器」「格式/前端」的专属流程。

边缘 / 代理:请求入口 → IP 提取 → 查询 → 决策(横向)。

gRPC 拦截器:请求 → 拦截器提取 IP → 查询 → 注入 metadata → 放行。

展示类:IP 查询 → 字段提取 → 业务决策 → UI 渲染。

格式 / 前端:输入 → 格式转换 → 输出。

🛡️ 配额、安全与扩展:跨食谱的共性纪律

无论走哪条食谱,下面几条是「配额不爆、安全不漏、可横向扩展」的共性纪律:

  • 复用单例 Client:所有食谱都应只建一个 ipapi.NewClient 实例,复用连接池与 Retries(默认 2,最多请求 3 次,仅对网络错误与 5xx 重试,429 等 4xx 不重试)。每请求新建 Client 会导致连接池爆炸且重试策略失效。
  • 限流是配额生命线:异步/批量/拦截器场景务必设 RateLimiter,把全局 QPS 压到 ipapi.co 配额之下;免费额度约 1000 次/天,生产请配付费 Key(WithAPIKey)。
  • 保留 IP 短路:内网/保留段直接降级,避免对注定失败的请求浪费配额——查询会返回 ErrReservedIP,参见 保留 IP 指南
  • 超时隔离:用 context.WithTimeout 给每次查询独立 deadline,外部 API 慢响应不能拖垮主链路;详见 上下文与超时
  • 失败降级而非报错:用 errors.Is 精确匹配哨兵错误(ErrRateLimited / ErrServerError / ErrNotFound / ErrInvalidIP),失败只记日志、走保守策略,业务照常进行。
  • 可重试才重试IsRetryableError 判定 ErrRateLimited || ErrServerError || ErrNotFound 为可重试,其余 4xx(如 ErrInvalidField / ErrInvalidKey)重试无意义,应快速失败。
  • 只取必要字段:风控只关心 country/asn 时用 GetField 替代 GetIPInfo,响应更小、更快、更省配额。

🚀 下一步

基于 MIT 许可证发布