开发者平台 · 8 / 9

调用开放接口:认证、权限、请求与响应、常见失败

每个接口支持的认证方式不同,先看接口详情再决定怎么调。外部服务调用客户主控只能用客户签发的 API Key,而且只能调标“API Key 可调”的接口。

← 全部教程

先看接口支持哪种认证

接口所属认证方式不能混用
开发者平台(/seller/v1)平台同源的 HttpOnly 会话 Cookie,写操作校验来源主控 API Key、主控会话
客户主控中标“API Key 可调”的接口Authorization: CdncaKey <key_id>.<secret>不能推断其他接口也接受 API Key
客户主控只接受登录会话的接口客户本人的主控登录会话与对应权限插件不能要求客户交出管理员会话
服务商协议安装身份的请求签名 + 插件的响应签名发布私钥、Cookie、通用 Bearer
WebhookWebhook v2 HMAC主控 API Key、服务商响应密钥

目前没有面向第三方自助申请的 OAuth 或 client credentials 流程。开放接口目录给出了每个接口的认证方式、所需权限、参数、请求体与响应字段和状态码,数字都从接口契约自动计算。

客户创建并保管 API Key

由客户在自己主控的“API Key”页(/dashboard/account/api-key)创建最小权限的 Key,按你服务的出口配置 IP 允许列表和有效期。创建接口 POST /v1/account/api-keys 只接受登录会话,需要 api_keys.self.manage、Idempotency-Key 与 If-Match,它自己不接受 CdncaKey。

  • secret 只在签发回执里出现一次,存进受控的密钥存储;不要放到浏览器前端、插件包或公开仓库。
  • 有效权限始终是 Key 的范围与所有者当前权限的交集;所有者权限被收回后,旧 Key 也随之失去这些权限。
  • 轮换后旧 secret 立即失效。

第一个只读请求

示例读取安全策略列表,需要 security_policies.read。在客户的受控环境里执行:

CDNCA_CONTROL_ORIGIN='https://control.example.com'
# inject CDNCA_API_KEY_ID and CDNCA_API_KEY_SECRET from your secret store
curl --fail-with-body --silent --show-error \
  -H "Authorization: CdncaKey ${CDNCA_API_KEY_ID:?}.${CDNCA_API_KEY_SECRET:?}" \
  "${CDNCA_CONTROL_ORIGIN}/v1/security-policies?page=1&limit=20"
{"items":[],"total":0,"page":1,"limit":20}

这个接口 page 从 1 开始,limit 为 1–100,一直取到已取数量达到 total。其他列表可能用不透明的 cursor 与 next_cursor 翻页,不能统一套页码;每个接口用哪种以接口详情的参数为准。

写请求:幂等与版本

  • 带 Idempotency-Key 的写接口:同一次逻辑操作的重试保留原键和原请求内容,服务端重放第一次的结果;改了内容再用旧键会得到冲突。
  • 带 If-Match 的写接口:先读取资源拿到 ETag,再带上它提交。缺少返回 428,版本已变返回 412;回读最新状态后重新判断,不要盲目覆盖。
  • 不要对所有写请求无条件自动重试,也不要用新键掩盖结果不明的请求。

常见失败及下一步

失败时响应体是统一的错误信封 {"error":{"code":"…","message":"…","request_id":"…"}},响应头带 X-Request-ID。按 code 做判断,message 不是本地化键;联系支持时附上 request_id。

状态码先检查下一步
400参数、请求体字段按接口详情的字段修正,不要原样重试
401凭据格式、是否过期或已轮换换成有效凭据
403Key 范围、所有者当前权限、租户作用域请客户调整授权;不要换更高权限账号绕过
404资源 ID 与所属租户确认资源存在且属于当前租户
409幂等冲突或状态冲突回读当前状态;重试保持原键和原内容
412 / 428If-Match 版本回读最新 ETag 后重新判断
429调用频率等待后降低并发再试
5xx 或网络超时请求是否已生效先按 ID 或列表回读确认,再决定是否用原 Idempotency-Key 重试