Revision a8326bef docs/source/devguide.rst
b/docs/source/devguide.rst | ||
---|---|---|
25 | 25 |
========================= ================================ |
26 | 26 |
Revision Description |
27 | 27 |
========================= ================================ |
28 |
0.5 (July 21, 2011) Object update from another object's data.
|
|
28 |
0.5 (July 22, 2011) Object update from another object's data.
|
|
29 | 29 |
\ Support object truncate. |
30 | 30 |
\ Create object using a standard HTML form. |
31 | 31 |
\ Purge container/object history. |
32 | 32 |
\ List other accounts that share objects with a user. |
33 | 33 |
\ List shared containers/objects. |
34 | 34 |
\ Update implementation guidelines. |
35 |
\ Check preconditions when creating/updating objects. |
|
35 | 36 |
0.4 (July 01, 2011) Object permissions and account groups. |
36 | 37 |
\ Control versioning behavior and container quotas with container policy directives. |
37 | 38 |
\ Support updating/deleting individual metadata with ``POST``. |
... | ... | |
159 | 160 |
HEAD |
160 | 161 |
"""" |
161 | 162 |
|
163 |
==================== =========================== |
|
164 |
Request Header Name Value |
|
165 |
==================== =========================== |
|
166 |
If-Modified-Since Retrieve if account has changed since provided timestamp |
|
167 |
If-Unmodified-Since Retrieve if account has not changed since provided timestamp |
|
168 |
==================== =========================== |
|
169 |
|
|
170 |
| |
|
171 |
|
|
162 | 172 |
====================== =================================== |
163 | 173 |
Request Parameter Name Value |
164 | 174 |
====================== =================================== |
... | ... | |
247 | 257 |
POST |
248 | 258 |
"""" |
249 | 259 |
|
250 |
====================== ============================================ |
|
251 |
Request Parameter Name Value |
|
252 |
====================== ============================================ |
|
253 |
update Do not replace metadata/groups (no value parameter) |
|
254 |
====================== ============================================ |
|
255 |
|
|
256 |
| |
|
257 |
|
|
258 | 260 |
==================== =========================== |
259 | 261 |
Request Header Name Value |
260 | 262 |
==================== =========================== |
... | ... | |
262 | 264 |
X-Account-Meta-* Optional user defined metadata |
263 | 265 |
==================== =========================== |
264 | 266 |
|
267 |
| |
|
268 |
|
|
269 |
====================== ============================================ |
|
270 |
Request Parameter Name Value |
|
271 |
====================== ============================================ |
|
272 |
update Do not replace metadata/groups (no value parameter) |
|
273 |
====================== ============================================ |
|
274 |
|
|
265 | 275 |
No reply content/headers. |
266 | 276 |
|
267 | 277 |
The operation will overwrite all user defined metadata, except if ``update`` is defined. |
... | ... | |
293 | 303 |
HEAD |
294 | 304 |
"""" |
295 | 305 |
|
306 |
==================== =========================== |
|
307 |
Request Header Name Value |
|
308 |
==================== =========================== |
|
309 |
If-Modified-Since Retrieve if container has changed since provided timestamp |
|
310 |
If-Unmodified-Since Retrieve if container has not changed since provided timestamp |
|
311 |
==================== =========================== |
|
312 |
|
|
313 |
| |
|
314 |
|
|
296 | 315 |
====================== =================================== |
297 | 316 |
Request Parameter Name Value |
298 | 317 |
====================== =================================== |
... | ... | |
437 | 456 |
POST |
438 | 457 |
"""" |
439 | 458 |
|
440 |
====================== ============================================ |
|
441 |
Request Parameter Name Value |
|
442 |
====================== ============================================ |
|
443 |
update Do not replace metadata/policy (no value parameter) |
|
444 |
====================== ============================================ |
|
445 |
|
|
446 |
| |
|
447 |
|
|
448 | 459 |
==================== ================================ |
449 | 460 |
Request Header Name Value |
450 | 461 |
==================== ================================ |
... | ... | |
452 | 463 |
X-Container-Meta-* Optional user defined metadata |
453 | 464 |
==================== ================================ |
454 | 465 |
|
466 |
| |
|
467 |
|
|
468 |
====================== ============================================ |
|
469 |
Request Parameter Name Value |
|
470 |
====================== ============================================ |
|
471 |
update Do not replace metadata/policy (no value parameter) |
|
472 |
====================== ============================================ |
|
473 |
|
|
455 | 474 |
No reply content/headers. |
456 | 475 |
|
457 | 476 |
The operation will overwrite all user defined metadata, except if ``update`` is defined. |
... | ... | |
506 | 525 |
HEAD |
507 | 526 |
"""" |
508 | 527 |
|
528 |
==================== ================================ |
|
529 |
Request Header Name Value |
|
530 |
==================== ================================ |
|
531 |
If-Match Retrieve if ETags match |
|
532 |
If-None-Match Retrieve if ETags don't match |
|
533 |
If-Modified-Since Retrieve if object has changed since provided timestamp |
|
534 |
If-Unmodified-Since Retrieve if object has not changed since provided timestamp |
|
535 |
==================== ================================ |
|
536 |
|
|
537 |
| |
|
538 |
|
|
509 | 539 |
====================== =================================== |
510 | 540 |
Request Parameter Name Value |
511 | 541 |
====================== =================================== |
... | ... | |
645 | 675 |
==================== ================================ |
646 | 676 |
Request Header Name Value |
647 | 677 |
==================== ================================ |
678 |
If-Match Put if ETags match with current object |
|
679 |
If-None-Match Put if ETags don't match with current object |
|
648 | 680 |
ETag The MD5 hash of the object (optional to check written data) |
649 | 681 |
Content-Length The size of the data written |
650 | 682 |
Content-Type The MIME content type of the object |
... | ... | |
712 | 744 |
==================== ================================ |
713 | 745 |
Request Header Name Value |
714 | 746 |
==================== ================================ |
747 |
If-Match Proceed if ETags match with object |
|
748 |
If-None-Match Proceed if ETags don't match with object |
|
715 | 749 |
Destination The destination path in the form ``/<container>/<object>`` |
716 | 750 |
Content-Type The MIME content type of the object (optional) |
717 | 751 |
Content-Encoding The encoding of the object (optional) |
... | ... | |
744 | 778 |
POST |
745 | 779 |
"""" |
746 | 780 |
|
747 |
====================== ============================================ |
|
748 |
Request Parameter Name Value |
|
749 |
====================== ============================================ |
|
750 |
update Do not replace metadata (no value parameter) |
|
751 |
====================== ============================================ |
|
752 |
|
|
753 |
| |
|
754 |
|
|
755 | 781 |
==================== ================================ |
756 | 782 |
Request Header Name Value |
757 | 783 |
==================== ================================ |
784 |
If-Match Proceed if ETags match with object |
|
785 |
If-None-Match Proceed if ETags don't match with object |
|
758 | 786 |
Content-Length The size of the data written (optional, to update) |
759 | 787 |
Content-Type The MIME content type of the object (optional, to update) |
760 | 788 |
Content-Range The range of data supplied (optional, to update) |
... | ... | |
770 | 798 |
X-Object-Meta-* Optional user defined metadata |
771 | 799 |
==================== ================================ |
772 | 800 |
|
801 |
| |
|
802 |
|
|
803 |
====================== ============================================ |
|
804 |
Request Parameter Name Value |
|
805 |
====================== ============================================ |
|
806 |
update Do not replace metadata (no value parameter) |
|
807 |
====================== ============================================ |
|
808 |
|
|
773 | 809 |
The ``Content-Encoding``, ``Content-Disposition``, ``X-Object-Manifest`` and ``X-Object-Meta-*`` headers are considered to be user defined metadata. An operation without the ``update`` parameter will overwrite all previous values and remove any keys not supplied. When using ``update`` any metadata with an empty value will be deleted. |
774 | 810 |
|
775 | 811 |
To change permissions, include an ``X-Object-Sharing`` header (as defined in ``PUT``). To publish, include an ``X-Object-Public`` header, with a value of ``true``. If no such headers are defined, no changes will be applied to sharing/public. Use empty values to remove permissions/unpublish (unpublishing also works with ``false`` as a header value). Sharing options are applied to the object - not its versions. |
... | ... | |
886 | 922 |
* Container policies to manage behavior and limits. |
887 | 923 |
* Headers ``X-Container-Block-*`` at the container level, exposing the underlying storage characteristics. |
888 | 924 |
* All metadata replies, at all levels, include latest modification information. |
889 |
* At all levels, a ``GET`` request may use ``If-Modified-Since`` and ``If-Unmodified-Since`` headers. |
|
925 |
* At all levels, a ``HEAD`` or ``GET`` request may use ``If-Modified-Since`` and ``If-Unmodified-Since`` headers.
|
|
890 | 926 |
* Container/object lists include all associated metadata if the reply is of type json/xml. Some names are kept to their OOS API equivalents for compatibility. |
891 | 927 |
* Option to include only shared containers/objects in listings. |
892 | 928 |
* Object metadata allowed, in addition to ``X-Object-Meta-*``: ``Content-Encoding``, ``Content-Disposition``, ``X-Object-Manifest``. These are all replaced with every update operation, except if using the ``update`` parameter (in which case individual keys can also be deleted). Deleting meta by providing empty values also works when copying/moving an object. |
... | ... | |
896 | 932 |
* Object create using ``POST`` to support standard HTML forms. |
897 | 933 |
* Partial object updates through ``POST``, using the ``Content-Length``, ``Content-Type``, ``Content-Range`` and ``Transfer-Encoding`` headers. Use another object's data to update with ``X-Source-Object`` and ``X-Source-Version``. Truncate with ``X-Object-Bytes``. |
898 | 934 |
* Object ``MOVE`` support. |
935 |
* Conditional object create/update operations, using ``If-Match`` and ``If-None-Match`` headers. |
|
899 | 936 |
* Time-variant account/container listings via the ``until`` parameter. |
900 | 937 |
* Object versions - parameter ``version`` in ``HEAD``/``GET`` (list versions with ``GET``), ``X-Object-Version-*`` meta in replies, ``X-Source-Version`` in ``PUT``/``COPY``. |
901 | 938 |
* Sharing/publishing with ``X-Object-Sharing``, ``X-Object-Public`` at the object level. Cross-user operations are allowed - controlled by sharing directives. Permissions may include groups defined with ``X-Account-Group-*`` at the account level. These apply to the object - not its versions. |
... | ... | |
948 | 985 |
Implementation Guidelines |
949 | 986 |
^^^^^^^^^^^^^^^^^^^^^^^^^ |
950 | 987 |
|
951 |
Pithos clients should use the ``pithos`` and ``trash`` containers for active and inactive objects respectively. If any of these containers is not found, the client software should create it, without interrupting the user's workflow. The ``home`` element corresponds to ``pithos`` and the ``trash`` element to ``trash``. Use ``PUT`` with the ``X-Move-From`` header, or ``MOVE`` to transfer objects from one container to the other. Use ``DELETE`` to remove from ``pithos`` without trashing, or to remove from ``trash``. When moving objects, detect naming conflicts with the ``If-Match`` or ``If-None-Match`` headers (**TBD**). Such conflicts should be resolved by the user.
|
|
988 |
Pithos clients should use the ``pithos`` and ``trash`` containers for active and inactive objects respectively. If any of these containers is not found, the client software should create it, without interrupting the user's workflow. The ``home`` element corresponds to ``pithos`` and the ``trash`` element to ``trash``. Use ``PUT`` with the ``X-Move-From`` header, or ``MOVE`` to transfer objects from one container to the other. Use ``DELETE`` to remove from ``pithos`` without trashing, or to remove from ``trash``. When moving objects, detect naming conflicts with the ``If-Match`` or ``If-None-Match`` headers. Such conflicts should be resolved by the user. |
|
952 | 989 |
|
953 | 990 |
Object names should use the ``/`` delimiter to impose a hierarchy of folders and files. |
954 | 991 |
|
Also available in: Unified diff