3.6. Swift オブジェクト操作

開発者は、Ceph Object Gateway 経由で Swift アプリケーションのプログラミングインターフェイス (API) を使用してオブジェクト操作を行うことができます。オブジェクトを一覧表示、作成、更新、および削除することができます。オブジェクトのメタデータを追加または更新することもできます。

3.6.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • RESTful クライアント。

3.6.2. Swift オブジェクト操作

オブジェクトは、データおよびメタデータを保存するコンテナーです。コンテナーには多くのオブジェクトがありますが、オブジェクト名は一意である必要があります。この API により、クライアントはオブジェクトの作成、アクセス制御およびメタデータの設定、オブジェクトのデータおよびメタデータの取得、およびオブジェクトの削除を行うことができます。この API は特定のユーザーのアカウントの情報に関連するリクエストを行うため、この API のすべてのリクエストを認証する必要があります。コンテナーまたはオブジェクトのアクセス制御が意図的に公開されていない限り、つまり匿名の要求を許可している場合を除きます。

3.6.3. Swift がオブジェクトを取得

オブジェクトを取得するには、API バージョン、アカウント、コンテナー、およびオブジェクト名を使用して GET リクエストを行います。コンテナー内のオブジェクトを取得するには、コンテナーの読み取り権限が必要です。

構文

GET /AP_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

表3.11 リクエストヘッダー

Name説明必須

範囲

オブジェクトの内容のサブセットを取得するには、バイト範囲を指定します。

Date

いいえ

If-Modified-Since

ソースオブジェクトの last_modified 属性の日時以降に変更された場合のみコピーします。

Date

いいえ

If-Unmodified-Since

ソースオブジェクトの last_modified 属性の日時以降に変更した場合のみコピーします。

Date

いいえ

Copy-If-Match

リクエストの ETag がソースオブジェクトの ETag と一致する場合にのみコピーします。

ETag.

いいえ

Copy-If-None-Match

リクエストの ETag がソースオブジェクトの ETag と一致しない場合にのみコピーします。

ETag.

No

表3.12 レスポンスヘッダー

Name説明

Content-Range

オブジェクトコンテンツのサブセットの範囲。range ヘッダーフィールドがリクエストで指定されている場合にのみ返されます。

3.6.4. Swift でオブジェクトの作成または更新

新規オブジェクトを作成するには、API バージョン、アカウント、コンテナー名、および新規オブジェクトの名前を使用して PUT 要求を行います。オブジェクトを作成または更新するには、コンテナーに書き込みパーミッションが必要です。オブジェクト名は、コンテナー内で一意である必要があります。PUT リクエストはべき等ではないため、一意の名前を使用しないと、リクエストによりオブジェクトが更新されます。ただし、オブジェクト名に疑似階層構文を使用して、別の疑似階層ディレクトリーにある場合は、同じ名前の別のオブジェクトと区別することができます。リクエストには、アクセス制御ヘッダーおよびメタデータヘッダーを含めることができます。

構文

PUT /AP_VERSION/ACCOUNT/TENANT:CONTAINER HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

表3.13 リクエストヘッダー

Name説明必須有効な値

ETag

オブジェクトの内容の MD5 ハッシュ。推奨されます。

文字列

No

該当なし

Content-Type

オブジェクトに含まれるコンテンツのタイプ。

文字列

No

該当なし

Transfer-Encoding

オブジェクトが大規模な集約オブジェクトの一部であるかどうかを示します。

文字列

いいえ

chunked

3.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

3.6.6. Swift でオブジェクトのコピー

オブジェクトのコピーを使用すると、オブジェクトをダウンロードしたり、別のコンテナーにアップロードしたりしなくてもよいように、オブジェクトのサーバー側のコピーを作成できます。あるオブジェクトのコンテンツを別のオブジェクトにコピーするには、API バージョン、アカウント、およびコンテナー名で PUT 要求または COPY 要求を行います。

PUT 要求の場合は、要求で宛先コンテナーおよびオブジェクト名、および要求ヘッダーのソースコンテナーおよびオブジェクトを使用します。

Copy リクエストには、要求でソースコンテナーおよびオブジェクト、および要求ヘッダーの宛先コンテナーおよびオブジェクトを使用します。オブジェクトをコピーするには、コンテナーに書き込みパーミッションが必要です。宛先オブジェクト名は、コンテナー内で一意である必要があります。リクエストはべき等ではないため、一意の名前を使用しないと、リクエストにより宛先オブジェクトが更新されます。宛先オブジェクトが別の疑似階層ディレクトリーにある場合は、オブジェクト名に疑似階層構文を使用して、同じ名前のソースオブジェクトと区別できます。リクエストには、アクセス制御ヘッダーおよびメタデータヘッダーを含めることができます。

構文

PUT /AP_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 /AP_VERSION/ACCOUNT/TENANT:SOURCE_CONTAINER/SOURCE_OBJECT HTTP/1.1
Destination: TENANT:DEST_CONTAINER/DEST_OBJECT

表3.14 リクエストヘッダー

Name説明必須

X-Copy-From

ソースコンテナー/オブジェクトパスを定義するために PUT リクエストで使用されます。

文字列

はい (PUT を使用している場合)

Destination

宛先コンテナー/オブジェクトパスを定義するために COPY 要求で使用されます。

文字列

はい (COPY を使用している場合)

If-Modified-Since

ソースオブジェクトの last_modified 属性の日時以降に変更された場合のみコピーします。

Date

いいえ

If-Unmodified-Since

ソースオブジェクトの last_modified 属性の日時以降に変更した場合のみコピーします。

Date

いいえ

Copy-If-Match

リクエストの ETag がソースオブジェクトの ETag と一致する場合にのみコピーします。

ETag.

いいえ

Copy-If-None-Match

リクエストの ETag がソースオブジェクトの ETag と一致しない場合にのみコピーします。

ETag.

No

3.6.7. Swift でオブジェクトメタデータの取得

オブジェクトのメタデータを取得するには、API バージョン、アカウント、コンテナー、およびオブジェクト名を使用して HEAD リクエストを行います。コンテナー内のオブジェクトからメタデータを取得するには、コンテナーの読み取り権限が必要です。このリクエストは、オブジェクト自体の要求と同じヘッダー情報を返しますが、オブジェクトのデータを返しません。

構文

HEAD /AP_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

3.6.8. Swift によるオブジェクトメタデータの追加または更新

オブジェクトにメタデータを追加するには、API バージョン、アカウント、コンテナー、およびオブジェクト名で POST リクエストを行います。メタデータを追加または更新するには、親コンテナーに対する書き込み権限が必要です。

構文

POST /AP_VERSION/ACCOUNT/TENANT:CONTAINER/OBJECT HTTP/1.1
Host: FULLY_QUALIFIED_DOMAIN_NAME
X-Auth-Token: AUTH_TOKEN

表3.15 リクエストヘッダー

Name説明必須

X-Object-Meta-KEY

任意の文字列の値を取得するユーザー定義のメタデータキー。

文字列

No