Swift对象存储API概述


OpenStack对象存储是一个高可用的,分布式的,最终一致的对象/ BLOB存储。您可以使用对象存储接口来创建、修改和获取对象和元数据,这是一组具有代表性的状态转移(REST)网络服务来实现的。

可以使用HTTPS(SSL)协议和对象存储进行交互,也可以使用标准的HTTP API调用来完成操作。你也可以使用特定语言的API,它使用RESTful API,使它为你整合到你的应用程序更加容易。

要获取对存储系统访问和更改数据的访问权,通过使用身份验证令牌。为了得到一个令牌,您将您的凭据提交到身份验证服务。验证服务返回一个令牌和帐户的网址。根据您使用的身份验证服务,该帐户的网址出现在:

  • OpenStack Identity Service. 该网址被定义在服务目录.
  • Tempauth. URL是在x-storage-url响应头提供。

在这两种情况下,网址是完整的网址,包括帐户资源。

对象存储API支持标准,非序列化的响应格式,这是默认的,和JSON和XML序列化的响应格式。

对象存储系统在层次结构中组织数据,如下:

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

            您的服务供应商创建您的帐户,您拥有该帐户的所有资源。该帐户定义了容器的名称空间。容器在不同的账户可能有相同的名称。

            在OpenStack环境,账户的意思和一个项目或租户的说法相似。

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

            除了包含的对象,你也可以使用容器通过使用访问控制列表(ACL)控制对对象的访问。你不能用个别对象存储一个ACL。

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

            你可以在一个请求中批量删除10000个容器。

            您可以在从您的云供应商设置存储策略用于容器上预定义的名称和定义,。

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

使用对象存储接口,您可以:

  • 存储无限数量的对象。每一个对象可以最大为5G,这是默认的。您可以配置最大对象大小。
  • 上传和存储任何大小的对象,以及大对象创建。
  • 使用跨源资源共享来管理对象安全。
  • 使用内容编码元数据压缩文件。
  • 使用内容配置元数据重写访问对象的行为。
  • 规划对象删除。
  • 批量删除最多10000个对象的一个请求。
  • 自动提取存档文件。
  • 为访问对象(GET)生成一个有时间限制的链接。
  • 通过上传对象直接从浏览器中的对象存储系统采用的形式postmiddlewa
  • 可以采用的表单的形式(POST)从浏览器直接上传对象到对象存储系统

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

具体而言,资源路径反映了这种结构,并具有这种格式:


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


例如,flowers/rose.jpg 对象在images 容器,12345678912345帐户,资源路径为:


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


注意对象名称中包含/字符。这个斜线并不表明对象存储有一个子层次被称为flowers ,因为容器不存储对象在实际的子文件夹。然而,在对象名称中包含的/或类似的约定使您可以创建虚拟的分级文件夹和目录。

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

要访问一个容器,将容器名称添加到资源路径。

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

如果您有大量的容器或对象,您可以通过使用查询参数来分页处理大量的容器或对象的列表。使用``marker````limit``, 和``end_marker``查询参数控制多少项返回列表中,列表的开始或结束。

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

Item

Maximum value

Notes

Number of HTTP headers

90

 

Length of HTTP headers

4096 bytes

 

Length per HTTP request line

8192 bytes

 

Length of HTTP request

5 GB

 

Length of container names

256 bytes

Cannot contain the / character.

Length of object names

1024 bytes

By default, there are no character restrictions.

在你调用API绑定前必须先对容器和对象名称预处理,先utf-8-encode然后URL-encode。如果你使用了一个编码的接口已经执行了网址编码,那么调用接口之前不要网址编码的名称。否则,您将双重编码这些名称。对网址编码的字符串要检查长度限制。

下边的API参考描述如何使用对象存储系统API:

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

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

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

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

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

             创建,替换,显示细节,并删除对象。复制对象与另一个对象的新的或不同的名称。更新对象元数据。