Swift/API
< Swift
Swift API 定义
目标:定义 Swift 的 v1.0 API 规范。
定义正式的 Swift API 规范的原因包括:
- 为实现 Swift API 兼容性的人员提供目标
- 允许客户端应用程序假设跨集群的一组功能
- 允许 Swift 中的更改可能破坏现有的客户端
- 为针对 Swift 集群进行功能测试提供更好的目标
由于 Swift 以前从未有过正式的 API 规范(即定义实现所依据的 API 的文档),因此我们必须为现有的集群做出调整。我们不能(或者至少在我看来不应该)以排除正在运行 Swift 某些先前发布版本的现有集群的方式定义 Swift API v1。
因此,本提案是 Swift 功能的子集,这些功能 A) 现有集群通用,并且 B) 对于任何替代 API 实现来说都是一个较低的入门门槛(但仍然可测试)。
当前 v1 API 文档
https://docs.openstack.org/api/openstack-object-storage/1.0/content/
Swift v1 API 中的特性
- ACL 特别不包含在 1.0 规范中
- 身份验证在 1.0 中未定义,除了“X-Auth-Token 包含在每个请求中以授权请求,如果资源不可公开访问”
- “瑕疵”定义为它们今天在代码中存在的方式(即现有客户端不会中断)
- etags 格式和转义
- 设置元数据的差异
- HEAD 204/200
- GET PUT POST DELETE COPY OPTIONS 都受支持
- POST 可以配置为对容器列表更新具有不同的语义 (object_post_as_copy)
- 由于 OPTIONS 与 CORS 同时引入,因此它们应该同时包含在 API 中,或者都不包含
- 允许对资源的并发请求,但冲突解决通过最后写入者胜出
- 支持单个和多范围请求
- 对大对象不支持多范围
- 版本化写入包含在 1.0 规范中
- 引入于 1.5.0,不在中间件中
- 对象过期包含在 1.0 规范中
- 引入于 1.4.5 之前
- 路径列表支持? (notmyname 认为可以将其从规范中排除,而只保留前缀+分隔符)
- 大对象 [2]
- 动态
- 引入于 1.4.0 之前
- 静态
- 最近引入,并且作为中间件 AND allow_static_large_object 布尔值
- 动态
- 批量请求不包含在 1.0 规范中
- 签名 URL [1]
- 引入于 2011 年 12 月,但作为中间件
- formpost 不包含在 1.0 规范中
- 引入于 2011 年 12 月,但作为中间件
- staticweb 不包含在 1.0 规范中
- 引入于 2011 年初,可扩展于 2012 年初
- 配额不包含在 1.0 规范中
- 最近引入,并且作为中间件
备注
[1] torgomatic 希望将其包含在核心中,因为它存在了很长时间,而且对很多事情都非常有用
[2] notmyname:我希望将其包含在核心中,因为大对象是 Swift 的关键特性,但我意识到它并没有被广泛部署