版本与错误
发布版本
每个数据集的数据由不可变的发布版本提供。GET /v1/datasets 与 GET /v1/datasets/{datasetId} 的 release 给出当前版本:releaseId、releaseFingerprint、source、rowCount 与 coverage(该版本承诺的覆盖范围;以列名为键的映射保持列名原样)。
- 查询省略
releaseId时使用当前版本,响应的meta.releaseId是实际使用的版本。 - 在请求体中传
releaseId可固定一个已发布版本。对已完成当前版本切换的数据集只接受当前版本,指定旧版本返回 409release-unavailable,而不是空数据;重新查询即可。尚未完成切换的数据集在过渡期继续接受其已发布版本。 GET /v1/datasets/{datasetId}?releaseId=<发布版本 ID>返回该版本嵌入的契约。- 版本固定不代表 PIT:服务不支持按历史知识时间或修订选择版本。
指纹与校验和
| 字段 | 含义 |
|---|---|
releaseFingerprint | 对发布版本内容的规范化结构取的 SHA-256 指纹,用来判断版本内容是否变化。 |
contractFingerprint | 对数据集契约的规范化结构取的 SHA-256 指纹,用来判断字段定义是否变化。 |
objectSha256 | 对一个 Parquet 文件字节取的 SHA-256,用来校验下载内容,见批量下载。 |
未发布、超出覆盖与无匹配
这几种情形的响应各不相同,客户端不应把它们都当成空结果:
| 情形 | 响应 |
|---|---|
| 数据集标识不在契约中 | 404 dataset-not-found |
| 契约中已定义但尚未发布 | 409 dataset-unavailable;GET /v1/datasets 中该项的 release 为 null |
| 请求范围超出该版本承诺的覆盖 | 409 coverage-unavailable |
| 范围合法但没有匹配记录 | 200,data 为空数组,page.complete 为 true |
错误信封
所有错误响应使用同一结构:
{
"error": {
"code": "release-unavailable",
"message": "This release is not the current version of the dataset.",
"requestId": "<请求 ID>"
}
}
- 程序按
code判断错误类型;message供人阅读,措辞可能调整。 - 向服务提供方反馈问题时附上
requestId。
常见错误码
每个接口可能返回的完整状态码与错误码见接口参考中各接口的响应定义。鉴权与限流相关的错误见鉴权。
| 状态 | 错误码 | 含义与处理 |
|---|---|---|
| 404 | dataset-not-found | 数据集标识不在契约中。 |
| 404 | not-found | 服务未启用批量交付时,准备与下载接口返回该错误。 |
| 409 | dataset-unavailable | 数据集尚未发布,或指定的版本不可用。 |
| 409 | release-unavailable | 指定的版本,或游标、下载票据所属的版本,不再是当前版本。重新查询或重新准备。 |
| 409 | cursor-release-unavailable | 游标或下载票据所属的版本已不可用。重新查询或重新准备。 |
| 409 | coverage-unavailable | 请求范围超出该版本承诺的覆盖。 |
| 409 | delivery-unavailable | 该版本既不是分区发布也没有批准的交付证据。 |
| 413 | request-too-large | 请求体超过服务允许的大小。 |
| 422 | invalid-query | 请求体结构、成员、列名、运算符或取值无效;未知成员同样被拒绝。 |
| 422 | invalid-cursor | 游标或下载票据无效、过期,或与本次请求不匹配。 |
| 422 | adjustment-unsupported | 请求的复权口径不在该版本的覆盖中。 |
| 422 | result-too-large | 结果超出服务允许的规模。缩小查询范围。 |
| 503 | data-unavailable | 当前版本的查询数据暂时不可用。稍后重试。 |
| 503 | service-unavailable | 服务或其依赖暂时不可用。稍后重试。 |
| 504 | query-timeout | 执行超时。缩小查询范围后重试。 |
命名规则
| 内容 | 规则 | 例子 |
|---|---|---|
| 协议字段:请求成员、响应信封、分页、元数据、错误信封、目录项、契约描述、覆盖信息、准备清单 | camelCase | releaseId、nextCursor、requestId、maxChunkBytes |
数据集列名:select、where 的 field、结果行、契约字段名、Parquet 列 | 保持契约原名(snake_case) | close_price、trading_date |
以列名为键的映射,例如覆盖信息中的 dimensions | 键保持列名原样 | adjustment |
| 错误码与枚举值 | kebab-case | dataset-not-found、not-ready |
| 对规范化结构取的哈希 | 以 Fingerprint 结尾 | releaseFingerprint、contractFingerprint |
| 对字节内容取的哈希 | 以 Sha256 结尾 | objectSha256 |