数据算对了,为什么调用方仍然可能拿错?

API 设计:分页、错误合同、单位

约 8 分钟5 道自测更新于 2026-10-30

一句话记住API 是一份机器可读的合同:分页要稳定,错误要可处理,数字要写清单位、口径、精度和时区。

01学完你能做到

  • 为静态快照和持续变化的数据选择偏移分页或游标分页。
  • 设计包含错误码、字段、可重试标记和修复提示的错误响应。
  • 为金额、比例、数量和时间字段明确单位、精度和时区。

02这课解决什么问题

数据算对了、服务也扛得住,用户为什么仍可能用错?常见原因是 API 没把分页边界、错误处理和数字单位写成清晰的合同。

03分页

偏移分页用 page/page_size 或 offset/limit 定位,直观且能跳页,但数据在翻页期间插入或删除时可能重复或遗漏,深翻页也可能越来越慢。

游标分页使用服务端返回的书签,例如 next_page_token。调用方不需要理解令牌内容,只需原样带回。它更适合持续变化的数据和深翻页,但不方便直接跳到第 50 页。

无论采用哪种方式,都应说明稳定排序、快照边界和是否还有下一页。例如:

{
  "items": [{"code": "000001.SZ"}],
  "next_page_token": "opaque-token",
  "has_more": true
}

对一个已收盘且固定的快照,偏移分页通常足够;对逐笔成交、新闻流等持续增长的数据,游标更稳妥。

04错误合同

错误响应至少要让调用方知道:错在哪、为什么错、能否重试、如何修复。RFC 9457 Problem Details 常见字段包括 type、title、status、detail 和 instance,还可以增加 field、constraint、retryable 等扩展字段。

{
  "type": "https://example.com/problems/invalid-argument",
  "title": "参数不合法",
  "status": 400,
  "detail": "page_size 必须在 1 到 500 之间",
  "field": "page_size",
  "constraint": "1..500",
  "retryable": false
}

通常 4xx 表示调用方要修改请求,5xx 表示服务端或上游暂时异常,但是否可重试仍应由稳定字段明确表达,不要让调用方猜状态码。

05单位、精度与时间

每个数值字段都要说明单位、口径和精度:金额是元还是万元,比例是 0.0031 还是 0.31,成交量是股还是手,价格是否使用定点小数或字符串。时间要说明是 Unix 毫秒还是带时区的 RFC 3339 字符串,例如 2026-10-28T15:00:00+08:00。

金融接口尤其要避免“比例值直接加百分号”。若接口返回 turnover_rate = 0.0031,展示为百分数时是约 0.31%,不是 0.0031%。

06常见误区

  1. 分页没有稳定排序,翻页过程中结果重复或遗漏。
  2. 不返回 has_more 或下一页令牌,调用方只能多发一次空请求试探。
  3. 只返回自然语言错误,没有稳定 code 和 retryable。
  4. 所有错误都返回 200 或都返回 500,调用方无法区分责任。
  5. 单位写在另一份文档里,字段本身没有描述。
  6. 金额直接使用二进制浮点累加而不明确精度。
  7. 时间戳不注明时区,导致跨地区调用出现日期偏移。

07延伸阅读

08一分钟讲给别人

试着用自己的话讲一遍API 是一份合同。分页要保证翻完不重不漏,静态快照可用页码,持续变化的数据更适合游标。报错要说明字段、原因、能否重试和下一步。金额、比例、数量和时间都必须写清单位与口径,否则一个小数点就可能让调用方差一百倍。

想一想

5 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01偏移分页和游标分页分别适合什么场景?

  2. 02RFC 9457 Problem Details 的常见核心字段有哪些?

  3. 034xx 和 5xx 对调用方意味着什么?

  4. 04比例值 0.0031 展示为百分数是多少?

  5. 05为什么分页必须有稳定排序?

已看 0/5 题

练动手练习

任务:为一个股票日 K 查询接口补齐分页、错误和字段说明:稳定按代码排序;返回 has_more 与不透明游标;为 turnover、volume、turnover_rate 和时间字段补充单位、精度和时区;为参数错误增加 field、constraint 和 retryable。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。