跳转到: 导航, 搜索

Swift/API

Swift API 定义

目标:定义 Swift 的 v1.0 API 规范。

定义正式的 Swift API 规范的原因包括:

  1. 为实现 Swift API 兼容性的人员提供目标
  2. 允许客户端应用程序假设跨集群的一组功能
  3. 允许 Swift 中的更改可能破坏现有的客户端
  4. 为针对 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 的关键特性,但我意识到它并没有被广泛部署