对接亚马逊数据 API 前要定的五个决策

2026/09/22

接一个数据 API 的技术动作其实很短:创建密钥、按文档发请求、检查状态码。快速开始鉴权已经把这部分讲完了。

真正贵的不是这一步,是它前面那五个决策。它们的共同点是:当时随手定,跑起来以后改起来很痛。

决策一:调用量怎么估

这个数字决定你买哪个调用包,也决定后面四个决策的松紧。

估算时最常见的偏差是把"一份报告"当成一次调用。实际上一份竞品周报通常是:20 个 ASIN × 3 类字段 × 每周 1 次 = 60 次调用,如果还要拉 12 个月的历史序列做对比,第一次跑完可能是几百次。

按这个公式估:实体数 × 字段类别数 × 频率,然后单独把"首次回填"算成一笔一次性支出。首跑和稳态运行的量级经常差一个数量级,只按稳态估会在第一天就超预算。

决策二:哪些字段落库,哪些实时取

判断依据只有一个:这个字段多久变一次。

变化速度典型字段建议
基本不变ASIN、品牌、类目、上架时间落库,只在缺失时补
按天变BSR、评分数、销量估算落库 + 定时刷新
随时变价格、优惠券、库存状态实时取,不要缓存过夜

两个方向都会浪费钱:什么都不存,等于为一批从不变化的数据反复付费;什么都存,等于拿着过期的价格做决策。

把表设计成"慢字段一张表、快字段一张带时间戳的流水表",比事后拆容易得多。没有时间戳的数值在三个月后就无法判断还能不能用。

决策三:重试策略要分类,不能统一处理

这是最容易写错的一处。失败不是一种,重试逻辑也不该只有一套。

状态码典型错误码重试有意义吗处理方式
400VALIDATION_ERROR请求内容不变时重试只会重复失败
401INVALID_API_KEYAPI_KEY_EXPIRED换密钥,不要退避重试
402INSUFFICIENT_CREDITS余额不足,重试多少次都不会成功
403ENDPOINT_NOT_INCLUDED套餐不包含该接口
413请求体超过 64 KB,要拆批
429RATE_LIMIT_EXCEEDEDCONCURRENCY_LIMIT_EXCEEDEDRetry-After 退避
503504SERVICE_BUSYSERVICE_TIMEOUT指数退避 + 随机抖动

402429 长得像但不是一类问题。 429 是"现在太快了,等一会儿",退避就能过去;402 是"钱花完了",它需要的是告警和充值流程,不是重试循环。把两者写进同一个 catch 分支,结果是余额耗尽那天你的任务在安静地空转。

同理,429 里的两个错误码也不同:RATE_LIMIT_EXCEEDED 是每分钟请求数超了,CONCURRENCY_LIMIT_EXCEEDED 是同时在途的请求太多。前者靠降频解决,后者靠降低并发解决——降频不会降并发。

响应里这三个头是用来做这件事的:

请求头说明
X-RateLimit-Limit当前分钟窗口允许的请求数
X-RateLimit-Remaining当前窗口剩余请求数
X-RateLimit-Reset窗口重置时间,Unix 秒级时间戳

别等到 429 才反应。X-RateLimit-Remaining 掉到阈值以下时就主动减速,比被限流后退避的吞吐高。

至于失败的请求会不会扣额度,不要靠猜。已登录用户可以在用量页面看到请求元数据,脱敏后的请求体和响应保留 7 天——上线前故意触发一次失败,然后去调用明细里核对一次,比任何推测都可靠。

错误码与限流文档完整状态码表、错误码清单、限流请求头和调用明细的保留规则

决策四:并发是账户级预算,不是任务级参数

这条最反直觉,也最容易在扩容时踩:

RPM、并发数和 Credits 按账户汇总,不能通过创建多个 API Key 获得额外配额。

很多团队的第一反应是"给每个任务发一把自己的密钥",以为这样各跑各的。实际上三个定时任务各开 10 条连接,账户面对的就是 30 条并发,谁先跑谁把别人挤成 CONCURRENCY_LIMIT_EXCEEDED

所以并发要设计成一个全局共享的限流器,而不是每个任务各写各的。具体做法:

  • 所有调用走同一个客户端封装,限流器在封装里,不在业务代码里
  • 给不同任务分优先级——实时接口的查询优先于夜间回填
  • 回填任务显式限速,它不着急,但它最容易把配额吃光

还有一个上限值得提前知道:请求体超过 64 KB 会返回 413。批量接口传 ASIN 列表时,这个上限决定了单批的最大条数,要在分批逻辑里写死,而不是等线上报错。

决策五:团队里密钥怎么管

既然配额本来就是账户共享的,多建密钥不是为了配额。它真正的价值是另外两件事:归属独立吊销

按用途分配,而不是按人:

  • prod-apicron-backfilldev-local 这样分,出问题时能从调用明细直接定位到是哪条链路
  • 某条链路出事,停掉那一把,其他照跑
  • 有人离职,要盘的是他接触过哪几把,而不是整个账户

三条底线:密钥只存服务端环境变量,不进仓库,不进前端代码。任何需要在浏览器里调用的场景,都应该由你自己的后端中转。

这五个决策的共同点

它们都不是技术难题,而是改起来成本不对称的选择。调用量估错,第一个月就会发现;缓存策略选错,要等到数据开始对不上;重试写成一套,要等到余额告罄那天;并发按任务设计,要等到第三个任务上线;密钥按人发,要等到第一次离职。

写第一行请求代码之前花半小时把这五条定下来,比上线后回来改省得多。

接下来选接口时,亚马逊数据 API 完全指南按业务场景拆了 46 个接口;如果还在判断该不该走第三方接口这条路,先看亚马逊数据 API 怎么选

常见问题

多创建几个 API Key 能提高限额吗? 不能。RPM、并发数和 Credits 都按账户汇总。多密钥的价值在归属和独立吊销,不在配额。

429 之后应该等多久? 优先按响应里的 Retry-After。没有这个头时用指数退避加随机抖动,避免多个任务在同一时刻一起重试。

怎么确认失败请求有没有扣额度? 在用量页面查调用明细。脱敏后的请求元数据保留 7 天,上线前主动触发一次失败核对一遍即可。

批量接口一次最多传多少条? 没有统一答案,受请求体 64 KB 上限约束。按你实际的参数长度算一次,然后在分批逻辑里留出余量。

Ecommerce Data API