Skip to main content

CAS API 文档

本文档描述了内容寻址存储(CAS)客户端用于与远程 CAS 服务器交互的 HTTP API 端点。

身份验证

要进行身份验证、授权并获取 API 基础 URL,请按照身份验证中的说明操作。

将哈希转换为字符串

有时哈希在 API 路径中用作十六进制字符串(重建、xorb 上传、全局去重 API)。

要将 32 字节哈希转换为 64 字符十六进制字符串以用作 API 路径的一部分,有一个特定过程,不能直接转换每个字节。

过程

对于哈希中的每 8 个字节(索引 0-7、8-15、16-23、24-31),反转这些区域中每个字节的顺序,然后按顺序连接这些区域。

换句话说,将哈希的每个 8 字节部分视为小端 64 位无符号整数,然后按顺序连接这 4 个数字的十六进制表示(每个用 0 填充到 16 个字符)。

note

在所有将哈希表示为字符串的情况下,都使用此过程从字节数组转换为字符串。

示例

假设哈希值为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

然后在转换为字符串之前,它首先将其字节重新排序为: [7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 22, 21, 20, 19, 18, 17, 16, 31, 30, 29, 28, 27, 26, 25, 24]

因此,提供的哈希 [0..32] 的字符串值不是 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f。 它是:07060504030201000f0e0d0c0b0a0908171615141312111f1e1d1c1b1a1918

端点

1. 获取文件重建

  • 描述:检索特定文件的重建信息,当设置 Range 标头时包括字节范围支持。

  • 路径/v1/reconstructions/{file_id}

  • 方法GET

  • 参数

  • 标头

    • Range:可选。格式:bytes={start}-{end}(end 是包含的)。
  • 最小令牌作用域read

  • Body:无。

  • 响应:JSON (QueryReconstructionResponse)

    {
    "offset_into_first_range": 0,
    "terms": [...],
    "fetch_info": {...}
    }
  • 错误响应:参见错误情况

    • 400 Bad Request:路径中的 file_id 格式错误。在重试之前修复路径。
    • 401 Unauthorized:刷新令牌以继续发出请求,或在 Authorization 标头中提供令牌。
    • 404 Not Found:文件不存在。不可重试。
    • 416 Range Not Satisfiable:请求的字节范围起始超过文件末尾。不可重试。
GET /v1/reconstructions/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
-H "Authorization: Bearer <token>"
OPTIONAL: -H Range: "bytes=0-100000"

示例文件重建响应 Body

有关下载协议规范中的更多详细信息,请参见 QueryReconstructionResponse

2. 查询块去重(全局去重)

  • 描述:检查块是否存在于 CAS 中以用于去重目的。
  • 路径/v1/chunks/{prefix}/{hash}
  • 方法GET
  • 参数
    • prefix:全局去重 API 唯一可接受的前缀是 default-merkledb
    • hash:十六进制格式的块哈希(64 个小写十六进制字符)。 参见块哈希以计算块哈希,以及将哈希转换为字符串
  • 最小令牌作用域read
  • Body:无。
  • 响应:Shard 格式字节(application/octet-stream),反序列化为 shard
  • 错误响应:参见错误情况
    • 400 Bad Request:路径中的哈希格式错误。在重试之前修复路径。
    • 401 Unauthorized:刷新令牌以继续发出请求,或在 Authorization 标头中提供令牌。
    • 404 Not Found:块尚未被全局去重跟踪。不可重试。
GET /v1/chunks/default-merkledb/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
-H "Authorization: Bearer <token>"

示例 Shard 响应 Body

示例 shard 响应 body 可以在 Xet 参考文件 中找到。

3. 上传 Xorb

  • 描述:将序列化的 Xorb 上传到服务器;以序列化格式上传真实数据。
  • 路径/v1/xorbs/{prefix}/{hash}
  • 方法POST
  • 参数
    • prefix:Xorb 上传 API 唯一可接受的前缀是 default
    • hash:十六进制格式的 Xorb 哈希(64 个小写十六进制字符)。 参见 Xorb 哈希 以计算哈希,以及将哈希转换为字符串
  • 最小令牌作用域write
  • Body:序列化的 Xorb 字节(application/octet-stream)。 参见 xorb 格式序列化
  • 响应:JSON (UploadXorbResponse)
{
"was_inserted": true
}
  • 注意:如果 Xorb 已存在,was_insertedfalse;这不是错误。

  • 错误响应:参见错误情况

    • 400 Bad Request:路径中的哈希格式错误、Xorb 哈希与 body 不匹配,或 body 序列化不正确。
    • 401 Unauthorized:刷新令牌以继续发出请求,或在 Authorization 标头中提供令牌。
    • 403 Forbidden:提供了令牌但作用域不够宽(例如,提供了 read 令牌)。客户端必须使用 write 作用域令牌重试。
POST /v1/xorbs/default/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
-H "Authorization: Bearer <token>"

示例 Xorb 请求 Body

示例 xorb 请求 body 可以在 Xet 参考文件 中找到。

4. 上传 Shard

  • 描述:将 Shard 上传到 CAS。 上传文件重建和新 xorb 列表,序列化为 shard 格式;将文件标记为已上传。
  • 路径/v1/shards
  • 方法POST
  • 最小令牌作用域write
  • Body:序列化的 Shard 数据作为字节(application/octet-stream)。 参见 Shard 格式指南
  • 响应:JSON (UploadShardResponse)
{
"result": 0
}
  • 其中 result 是:
    • 0:Shard 已存在。
    • 1SyncPerformed — Shard 已注册。

result 的值不携带任何含义,如果上传 shard API 返回 200 OK 状态代码,则上传成功,列出的文件被视为已上传。

  • 错误响应:参见错误情况
    • 400 Bad Request:Shard 序列化不正确或 Shard 内容验证失败。
      • 可能意味着引用的 Xorb 不存在或 shard 太大
    • 401 Unauthorized:刷新令牌以继续发出请求,或在 Authorization 标头中提供令牌。
    • 403 Forbidden:提供了令牌但作用域不够宽(例如,提供了 read 令牌)。
POST /v1/shards
-H "Authorization: Bearer <token>"

示例 Shard 请求 Body

示例 shard 请求 body 可以在 Xet 参考文件 中找到。

错误情况

不可重试的错误

  • 400 Bad Request:当请求参数无效时返回(例如,上传 API 上的无效 Xorb/Shard)。
  • 401 Unauthorized:刷新令牌以继续发出请求,或在 Authorization 标头中提供令牌。
  • 403 Forbidden:提供了令牌但作用域不够宽(例如,为需要 write 作用域的 API 提供了 read 令牌)。
  • 404 Not Found:在 GET API 上发生,其中资源(Xorb、文件)不存在。
  • 416 Range Not Satisfiable:仅限重建 API;当字节范围请求无效时返回。具体来说,请求的起始范围大于或等于文件的长度。

可重试的错误

  • 连接错误:通常由网络问题引起。如果是间歇性的,请重试。 客户端应确保没有防火墙阻止请求,并且不应使用 DNS 覆盖。
  • 429 速率限制:使用退避策略降低请求速率,然后等待并重试。 假设所有 API 都受到速率限制。
  • 500 内部服务器错误:服务器遇到间歇性问题;客户端应重试其请求。
  • 503 服务不可用:服务暂时无法处理请求;等待并重试。
  • 504 网关超时:服务响应时间过长;等待并重试。