对象存储 API 概述

OpenStack 对象存储是一个高可用性、分布式、最终一致性的对象/blob 存储。您可以使用对象存储 API 创建、修改和获取对象和元数据,该 API 实现为一组表述性状态转移 (REST) Web 服务。

有关 OpenStack 对象存储的介绍,请参阅 OpenStack Swift 管理员指南

您使用 HTTPS (SSL) 协议与对象存储交互,并使用标准的 HTTP 调用执行 API 操作。您还可以使用特定于语言的 API,这些 API 使用 RESTful API,使您更容易地集成到您的应用程序中。

为了确认您访问和更改帐户中数据的权利,您通过使用身份验证令牌来识别自己。要获取令牌,您需要将您的凭据提供给身份验证服务。身份验证服务将返回一个令牌和帐户的 URL。根据您使用的身份验证服务,帐户的 URL 将出现在

  • OpenStack 身份服务。URL 在服务目录中定义。

  • Tempauth。URL 包含在 X-Storage-Url 响应头中。

在两种情况下,URL 都是完整的 URL,并包含帐户资源。

对象存储 API 支持标准的、未序列化的响应格式(默认),以及 JSON 和 XML 序列化的响应格式。

对象存储系统以以下层次结构组织数据

  • 帐户。代表层次结构的顶层。

    您的服务提供商创建您的帐户,您拥有该帐户中的所有资源。帐户定义了容器的命名空间。两个不同的帐户中的容器可以具有相同的名称。

    在 OpenStack 环境中,帐户 与项目或租户同义。

  • 容器。定义对象的命名空间。两个不同容器中的同名对象代表两个不同的对象。您可以在一个帐户中创建任意数量的容器。

    除了包含对象之外,您还可以使用容器通过访问控制列表 (ACL) 控制对对象的访问。您无法将 ACL 与单个对象一起存储。

    此外,您可以在容器级别配置和控制许多其他功能,例如对象版本控制。

    您可以批量删除单个请求中最多 10,000 个容器。

    您可以为容器设置存储策略,该策略具有来自您的云提供商的预定义名称和定义。

  • 对象。存储数据内容,例如文档、图像等。您还可以将自定义元数据与对象一起存储。

    使用对象存储 API,您可以

    • 存储无限数量的对象。每个对象的大小可以达到 5 GB,这是默认值。您可以配置最大对象大小。

    • 使用大对象创建上传和存储任何大小的对象。

    • 使用跨域资源共享来管理对象安全性。

    • 使用 content-encoding 元数据压缩文件。

    • 使用 content-disposition 元数据覆盖对象浏览器的行为。

    • 安排对象进行删除。

    • 批量删除单个请求中最多 10,000 个对象。

    • 自动提取归档文件。

    • 生成一个 URL,该 URL 提供对对象的限时 GET 访问权限。

    • 使用表单 POST 中间件直接从浏览器将对象上传到对象存储系统。

    • 创建指向其他对象的符号链接。

帐户、容器和对象的层次结构会影响您与对象存储 API 交互的方式。

具体来说,资源路径反映了这种结构,并且具有以下格式

/v1/{account}/{container}/{object}

例如,对于帐户 12345678912345 中的 images 容器中的 flowers/rose.jpg 对象,资源路径是

/v1/12345678912345/images/flowers/rose.jpg

请注意,对象名称包含 / 字符。此斜杠不表示对象存储具有名为 flowers 的子层次结构,因为容器不会在实际的子文件夹中存储对象。但是,在对象名称中包含 / 或类似的约定使您可以创建伪层次文件夹和目录。

例如,如果对象存储的端点是 objects.mycloud.com,则返回的 URL 是 https://objects.mycloud.com/v1/12345678912345

要访问容器,请将容器名称附加到资源路径。

要访问对象,请将容器和对象名称附加到路径。

如果您有大量容器或对象,可以使用查询参数来分页浏览大量的容器或对象列表。使用 markerlimitend_marker 查询参数来控制列表中返回的项目数量以及列表的开始或结束位置。如果您想反向分页,可以使用查询参数 reverse,请注意,当应用于反向列表时,您的标记和结束标记应进行切换。例如,对于对象列表 [a, b, c, d, e],非反转的可能是

/v1/{account}/{container}/?marker=a&end_marker=d
b
c

但是,当反转标记和结束标记应用于反向列表时

/v1/{account}/{container}/?marker=d&end_marker=a&reverse=on
c
b

对象存储 HTTP 请求具有以下默认约束。您的服务提供商可能会使用不同的默认值。

项目

最大值

说明

HTTP 标头数量

90

HTTP 标头长度

4096 字节

HTTP 请求行长度

8192 字节

HTTP 请求长度

5 GB

容器名称长度

256 字节

不能包含 / 字符。

对象名称长度

1024 字节

默认情况下,没有字符限制。

在调用 API 绑定之前,您必须对容器和对象名称进行 UTF-8 编码,然后进行 URL 编码。如果您使用的 API 绑定为您执行 URL 编码,请不要在调用 API 绑定之前对名称进行 URL 编码。否则,您将对这些名称进行双重编码。检查长度限制是否适用于 URL 编码的字符串。

API 参考描述了您可以使用对象存储 API 执行的操作

  • 存储帐户:用于执行帐户级别任务。

    列出指定帐户的容器。创建、更新和删除帐户元数据。显示帐户元数据。

  • 存储容器:用于执行容器级别任务。

    列出指定容器中的对象。创建、显示、删除容器的详细信息。创建、更新、显示和删除容器元数据。

  • 存储对象:用于执行对象级别任务。

    创建、替换、显示对象详细信息和删除对象。将对象复制到另一个对象,并使用新名称或不同名称。更新对象元数据。