5 A container is a mechanism for storing data objects. An account may
6 have many containers, but container names must be unique. This API enables a
7 client to create a container, set access controls and metadata,
8 retrieve a container's contents, and delete a container. Since this API
9 makes requests related to information in a particular user's account, all
10 requests in this API must be authenticated unless a container's access control
11 is deliberately made publicly accessible (i.e., allows anonymous requests).
13 .. note:: The Amazon S3 API uses the term 'bucket' to describe a data container.
14 When you hear someone refer to a 'bucket' within the Swift API, the term
15 'bucket' may be construed as the equivalent of the term 'container.'
17 One facet of object storage is that it does not support hierarchical paths
18 or directories. Instead, it supports one level consisting of one or more
19 containers, where each container may have objects. The RADOS Gateway's
20 Swift-compatible API supports the notion of 'pseudo-hierarchical containers,'
21 which is a means of using object naming to emulate a container (or directory)
22 hierarchy without actually implementing one in the storage system. You may
23 name objects with pseudo-hierarchical names
24 (e.g., photos/buildings/empire-state.jpg), but container names cannot
25 contain a forward slash (``/``) character.
31 To create a new container, make a ``PUT`` request with the API version, account,
32 and the name of the new container. The container name must be unique, must not
33 contain a forward-slash (/) character, and should be less than 256 bytes. You
34 may include access control headers and metadata headers in the request. The
35 operation is idempotent; that is, if you make a request to create a container
36 that already exists, it will return with a HTTP 202 return code, but will not
37 create another container.
45 PUT /{api version}/{account}/{container} HTTP/1.1
47 X-Auth-Token: {auth-token}
48 X-Container-Read: {comma-separated-uids}
49 X-Container-Write: {comma-separated-uids}
50 X-Container-Meta-{key}: {value}
58 :Description: The user IDs with read permissions for the container.
59 :Type: Comma-separated string values of user IDs.
64 :Description: The user IDs with write permissions for the container.
65 :Type: Comma-separated string values of user IDs.
68 ``X-Container-Meta-{key}``
70 :Description: A user-defined meta data key that takes an arbitrary string value.
78 If a container with the same name already exists, and the user is the
79 container owner then the operation will succeed. Otherwise the operation
84 :Description: The container already exists under a different user's ownership.
85 :Status Code: ``BucketAlreadyExists``
90 List a Container's Objects
91 ==========================
93 To list the objects within a container, make a ``GET`` request with the with the
94 API version, account, and the name of the container. You can specify query
95 parameters to filter the full list, or leave out the parameters to return a list
96 of the first 10,000 object names stored in the container.
104 GET /{api version}/{container} HTTP/1.1
106 X-Auth-Token: {auth-token}
114 :Description: Defines the format of the result.
116 :Valid Values: ``json`` | ``xml``
121 :Description: Limits the result set to objects beginning with the specified prefix.
127 :Description: Returns a list of results greater than the marker value.
133 :Description: Limits the number of results to the specified value.
135 :Valid Range: 0 - 10,000
140 :Description: The delimiter between the prefix and the rest of the object name.
146 :Description: The pseudo-hierarchical path of the objects.
152 :Description: Allows the results to be returned unordered to reduce computation overhead. Cannot be used with ``delimiter``.
155 :Non-Standard Extension: Yes
163 :Description: The container.
168 :Description: An object within the container.
173 :Description: The name of an object within the container.
178 :Description: A hash code of the object's contents.
183 :Description: The last time the object's contents were modified.
188 :Description: The type of content within the object.
193 Update a Container's ACLs
194 =========================
196 When a user creates a container, the user has read and write access to the
197 container by default. To allow other users to read a container's contents or
198 write to a container, you must specifically enable the user.
199 You may also specify ``*`` in the ``X-Container-Read`` or ``X-Container-Write``
200 settings, which effectively enables all users to either read from or write
201 to the container. Setting ``*`` makes the container public. That is it
202 enables anonymous users to either read from or write to the container.
204 .. note:: If you are planning to expose public read ACL functionality
205 for the Swift API, it is strongly recommended to include the
206 Swift account name in the endpoint definition, so as to most
207 closely emulate the behavior of native OpenStack Swift. To
208 do so, set the ``ceph.conf`` configuration option ``rgw
209 swift account in url = true``, and update your Keystone
210 endpoint to the URL suffix ``/v1/AUTH_%(tenant_id)s``
211 (instead of just ``/v1``).
219 POST /{api version}/{account}/{container} HTTP/1.1
221 X-Auth-Token: {auth-token}
223 X-Container-Write: {uid1}, {uid2}, {uid3}
230 :Description: The user IDs with read permissions for the container.
231 :Type: Comma-separated string values of user IDs.
234 ``X-Container-Write``
236 :Description: The user IDs with write permissions for the container.
237 :Type: Comma-separated string values of user IDs.
241 Add/Update Container Metadata
242 =============================
244 To add metadata to a container, make a ``POST`` request with the API version,
245 account, and container name. You must have write permissions on the
246 container to add or update metadata.
253 POST /{api version}/{account}/{container} HTTP/1.1
255 X-Auth-Token: {auth-token}
256 X-Container-Meta-Color: red
257 X-Container-Meta-Taste: salty
262 ``X-Container-Meta-{key}``
264 :Description: A user-defined meta data key that takes an arbitrary string value.
269 Enable Object Versioning for a Container
270 ========================================
272 To enable object versioning a container, make a ``POST`` request with
273 the API version, account, and container name. You must have write
274 permissions on the container to add or update metadata.
276 .. note:: Object versioning support is not enabled in radosgw by
277 default; you must set ``rgw swift versioning enabled =
278 true`` in ``ceph.conf`` to enable this feature.
285 POST /{api version}/{account}/{container} HTTP/1.1
287 X-Auth-Token: {auth-token}
288 X-Versions-Location: {archive-container}
293 ``X-Versions-Location``
295 :Description: The name of a container (the "archive container") that
296 will be used to store versions of the objects in the
297 container that the ``POST`` request is made on (the
298 "current container"). The archive container need not
299 exist at the time it is being referenced, but once
300 ``X-Versions-Location`` is set on the current container,
301 and object versioning is thus enabled, the archive
302 container must exist before any further objects are
303 updated or deleted in the current container.
305 .. note:: ``X-Versions-Location`` is the only
306 versioning-related header that radosgw
307 interprets. ``X-History-Location``, supported
308 by native OpenStack Swift, is currently not
309 supported by radosgw.
311 :Required: No (if this header is passed with an empty value, object
312 versioning on the current container is disabled, but the
313 archive container continues to exist.)
319 To delete a container, make a ``DELETE`` request with the API version, account,
320 and the name of the container. The container must be empty. If you'd like to check
321 if the container is empty, execute a ``HEAD`` request against the container. Once
322 you have successfully removed the container, you will be able to reuse the container name.
329 DELETE /{api version}/{account}/{container} HTTP/1.1
331 X-Auth-Token: {auth-token}
339 :Description: The container was removed.
340 :Status Code: ``NoContent``