4.6. Swift 对象操作
作为开发人员,您可以通过 Ceph 对象网关利用 Swift 应用程序编程接口(API)执行对象操作。您可以列出、创建、更新和删除对象。您还可以添加或更新对象的元数据。
4.6.1. 先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- RESTful 客户端。
4.6.2. Swift 对象操作
对象是用于存储数据和元数据的容器。容器可能有许多对象,但对象名称必须是唯一的。此 API 允许客户端创建对象,设置访问控制和元数据,检索对象的数据和元数据,以及删除对象。由于此 API 发出与特定用户帐户中信息相关的请求,因此此 API 中的所有请求都必须经过身份验证。除非容器或对象的访问控制被有意公开访问,否则这是允许匿名请求。
4.6.3. Swift 获取对象
要检索对象,请利用 API 版本、帐户、容器和对象名称发出 GET
请求。必须具有容器的读取权限,以检索对象。
语法
GET /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
请求 Headers
range
- 描述
- 要检索对象内容的子集,您可以指定一个字节范围。
- Type
- Date
- 必需
- 否
if-Modified-Since
- 描述
-
只有自源对象的
last_modified
属性的日期和时间以来修改时才复制。 - Type
- Date
- 必需
- 否
If-Unmodified-Since
- 描述
-
仅在不修改源对象的
last_modified
属性的日期和时间时复制。 - Type
- Date
- 必需
- 否
Copy-If-Match
- 描述
- 只有在请求中的 ETag 与源对象的 ETag 匹配时才复制。
- Type
- ETag
- 必需
- 否
Copy-If-None-Match
- 描述
-
只有在请求中的
ETag
不与源对象的 ETag 匹配时才复制。 - Type
- ETag
- 必需
- 否
响应标头
Content-Range
- 描述
- 对象内容子集的范围。仅在请求中指定范围标头字段时返回。
4.6.4. Swift 创建或更新对象
若要创建新对象,请利用 API 版本、帐户、容器名称和新对象名称发出 PUT
请求。您必须具有容器的写入权限才能创建或更新对象。对象名称在容器内必须是唯一的。PUT
请求不是幂等的,因此如果您不使用唯一名称,则请求将更新对象。但是,您可以在对象名称中使用伪层次结构语法,如果它位于不同的伪层次结构目录中,将其与同一名称的另一个对象区分开来。您可以在请求中包含访问控制标头和元数据标头。
语法
PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
请求 Headers
ETag
- 描述
- 对象内容的 MD5 哈希。推荐选项。
- Type
- 字符串
- 有效值
- 不适用
- 必需
- 否
Content-Type
- 描述
- 对象内容的 MD5 哈希。
- Type
- 字符串
- 有效值
- 不适用
- 必需
- 否
Transfer-Encoding
- 描述
- 指明对象是更大聚合对象的一部分。
- Type
- 字符串
- 有效值
-
chunked
- 必需
- 否
4.6.5. Swift 删除对象
要删除对象,请利用 API 版本、帐户、容器和对象名称发出 DELETE
请求。您必须具有容器的写入权限,才能删除其中的对象。成功删除对象后,您将能够重复利用对象名称。
语法
DELETE /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
4.6.6. Swift 复制对象
通过复制对象,您可以制作对象的服务器端副本,因此您不必下载对象并将其上传到其他容器下。要将一个对象的内容复制到另一个对象,您可以使用 API 版本、帐户和容器名称发出 PUT
请求或 COPY
请求。
对于 PUT
请求,请使用请求中的目标容器和对象名称,以及请求标头中的源容器和对象。
对于 Copy
request,请使用请求中的源容器和对象,以及请求标头中的目标容器和对象。您必须具有容器的写入权限才能复制对象。目标对象名称在容器内必须是唯一的。请求不是幂等的,因此如果您不使用唯一名称,则请求将更新目标对象。如果目标名称位于不同的伪层次结构目录中,您可以使用伪层次结构语法,将目的地对象与同一名称的源对象区分开。您可以在请求中包含访问控制标头和元数据标头。
语法
PUT /API_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1 X-Copy-From: TENANT:SOURCE_CONTAINER/SOURCE_OBJECT Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
或者:
语法
COPY /API_VERSION/ACCOUNT/TENANT:SOURCE_CONTAINER/SOURCE_OBJECT HTTP/1.1 Destination: TENANT:DEST_CONTAINER/DEST_OBJECT
请求 Headers
X-Copy-From
- 描述
-
与
PUT
请求一起使用,以定义源容器/对象路径。 - Type
- 字符串
- 必需
-
是,如果使用
PUT
。
目的地
- 描述
-
与
COPY
请求一起使用以定义目标容器/对象路径。 - Type
- 字符串
- 必需
-
是,如果使用
COPY
。
If-Modified-Since
- 描述
-
只有自源对象的
last_modified
属性的日期和时间以来修改时才复制。 - Type
- Date
- 必需
- 否
If-Unmodified-Since
- 描述
-
仅在不修改源对象的
last_modified
属性的日期和时间时复制。 - Type
- Date
- 必需
- 否
Copy-If-Match
- 描述
- 只有在请求中的 ETag 与源对象的 ETag 匹配时才复制。
- Type
- ETag
- 必需
- 否
Copy-If-None-Match
- 描述
-
只有在请求中的
ETag
不与源对象的 ETag 匹配时才复制。 - Type
- ETag
- 必需
- 否
4.6.7. Swift 获取对象元数据
要检索对象的元数据,请发出带有 API 版本、帐户、容器和对象名称的 HEAD
请求。您必须具有容器的读取权限,以便从容器内的对象检索元数据。此请求返回与对象本身的请求相同的标头信息,但不会返回对象的数据。
语法
HEAD /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
4.6.8. Swift 添加或更新对象元数据
要为对象添加元数据,请利用 API 版本、帐户、容器和对象名称发出 POST
请求。父容器必须具有写入权限才能添加或更新元数据。
语法
POST /API_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1 Host: FULLY_QUALIFIED_DOMAIN_NAME X-Auth-Token: AUTH_TOKEN
请求 Headers
X-Object-Meta-KEY
- 描述
- 用户定义的 meta 数据键,它采用任意字符串值。
- Type
- 字符串
- 必需
- 否