OpenStack Object Storage Developer Guide
|
|
|
- Charlene Mae Hutchinson
- 9 years ago
- Views:
Transcription
1 docs.openstack.org
2 OpenStack Object Storage ( ) Copyright OpenStack, LLC All rights reserved. This document is intended for software developers interested in developing applications using the OpenStack Object Storage Application Programming Interface (API). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ii
3 List of Examples 1.1. Authentication HTTP Request Authentication HTTP Response Storage Account Services HTTP Request List Containers HTTP Request List Containers HTTP Response Get Containers Details HTTP and JSON Request Get Containers Details HTTP and JSON Response Containers Details HTTP and XML Request Containers Details HTTP and XML Response List Large Number of Containers Get Account Metadata HTTP Request Get Account Metadata HTTP Response Update Account Metadata HTTP Request Update Account Metadata HTTP Response View Account Metadata HTTP Request View Account Metadata HTTP Response Delete Account Metadata HTTP Request Storage Container Services HTTP Request List Objects HTTP Request List Objects HTTP Response Get Objects Details HTTP and JSON Request Get Objects Details HTTP and JSON Response Objects Details Request: XML Objects Details Request: XML List Large Number of Objects List Pseudo-Hierarchical Folders/Directories Request Create Container HTTP Request Create Container HTTP Response Container Create Container with Metadata HTTP Request Create Container with Metadata HTTP Response Delete Container HTTP Request Delete Container HTTP Response Get Container Metadata HTTP Request Get Container Metadata HTTP Response Update Container Metadata HTTP Request Update Container Metadata HTTP Response View Container Metadata HTTP Request View Container Metadata HTTP Response Delete Container Metadata HTTP Request Make Container Publicly Readable Set Site Index File Enable File Listing Enable CSS for File Listing Set Error Pages for Static Website Request Get Object Details HTTP Request Get Object Details HTTP Response Create or Update Object HTTP Request Create or Update Object HTTP Response iii
4 2.47. Upload Segment of Large Object HTTP Request Upload Segment of Large Object HTTP Response Upload Next Segment of Large Object HTTP Request Upload Next Segment of Large Object HTTP Response Upload Manifest HTTP Request Upload Manifest HTTP Response Upload Unspecified Quantity of Content HTTP Request Upload Unspecified Quantity of Content HTTP Response Assign CORS Header HTTP Request Content-Encoding Header HTTP Request Content-Disposition Header HTTP Request Delete Object at HTTP Request Delete Object after HTTP Request Object Versioning with curl Object Copy Method Object Copy Method Object Delete HTTP Request Object Delete HTTP Response Get Object Metadata HTTP Request Get Object Metadata HTTP Response Update Object Metadata HTTP Request Update Object Metadata HTTP Response curl Authenticate curl Get Storage Space curl List Storage Container curl Create Storage Container curl List Storage Container After a Creation curl List Storage Container (long list) curl List Storage Container with Paging (first page) curl List Storage Container with Paging (later pages) curl List Storage Container (JSON output) curl List Storage Container (XML output) curl List Container Metadata curl Delete Storage Container curl List Containers After a Delete curl List Container Showing Lack of ACL curl Setting an ACL on a Container curl List Container Showing with an ACL Sample File Listing Creating and Uploading an Object to a Container curl List Container Showing Newly Uploaded Object curl List Container Showing Multiple Newly Uploaded Objects curl List Objects (first page) curl List Objects with Paging (later pages) Removing Local Copies curl Retrieve an Object curl Server-side Copy an Object curl Confirming the Server-side Copy an Object curl Delete an Object curl Confirming the Delete an Object curl Set Object Metadata iv
5 3.30. curl Reading Object Metadata curl Create New Container for Folders curl Listing the New Container curl Upload an Object with a Prefix curl Upload a Different Object with a Different Prefix curl Listing a Container with Object Prefix curl Listing a Container with a Path curl Listing a Container with a Delimiter v
6 Overview Table of Contents 1. Intended Audience... vi OpenStack Object Storage is an affordable, redundant, scalable, and dynamic storage service offering. The core storage system is designed to provide a safe, secure, automatically re-sizing and network-accessible way to store data. You can store an unlimited quantity of files and each file can be as large as 5 GBs, plus with large object creation, you can upload and store objects of virtually any size. OpenStack Object Storage allows users to store and retrieve files and content through a simple Web Service interface (ReST: Representational State Transfer). There are also language-specific APIs that utilize the ReSTful API but make it much easier for developers to integrate into their applications. For more details on the OpenStack Object Storage service, please refer to swift.openstack.org We welcome feedback, comments, and bug reports at 1. Intended Audience This guide is intended to assist software developers who want to develop applications using the OpenStack Object Storage API. It fully documents the ReST application programming interface (API) that allows developers to interact with the storage components of the OpenStack Object Storage system. To use the information provided here, you should first have a general understanding of the OpenStack Object Storage service and have access to an installation of OpenStack Object Storage. You should also be familiar with: ReSTful web services HTTP/1.1 Rackspace also provides Rackspace-supported, language-specific APIs in several popular programming languages. Currently, the supported APIs are C#/.NET, Java, PHP, Python, and Ruby. These APIs utilize the ReST API and are provided to help developers rapidly integrate OpenStack Object Storage support into their applications without needing to write at the ReST interface. Each API includes its own documentation in its native format. For example, the Java API includes JavaDocs and the C#/.NET API includes a CHM file. vi
7 1. General API Information Table of Contents 1.1. Authentication Overview of API Operations Authentication Request Client authentication is provided via a ReST interface using the GET method, with v1.0 supplied as the path. Additionally, two headers are required, X-Auth-User and X-Auth- Key with values for the username and API Access Key respectively. Each ReST request against the OpenStack Object Storage system requires the inclusion of a specific authorization token HTTP x-header, defined as X-Auth-Token. Clients obtain this token, along with the Cloud Servers API URL, by first using an authentication service and supplying a valid username and API access key. To authenticate, you must supply your username and API access key in x-headers: Use your OpenStack Object Storage (Swift) username as the username for the API. Place it in the X-Auth-User x-header. Get your API access key from authentication service you chose when installing. You have some options for auth, including tempauth (which is included with Swift), swauth (an auth service for Swift as WSGI middleware that uses Swift itself as a backing store that is provided via download from Github), the OpenStack Identity Service (project named Keystone), or you can use your own authentication system. Place your access key in the X-Auth-Key x-header. Response Example 1.1. Authentication HTTP Request GET /v1.0 HTTP/1.1 Host: auth.api.yourcloud.com X-Auth-User: jdoe X-Auth-Key: a86850deb2742ec3cb41518e26aa2d89 When authentication is successful, an HTTP status 204 (No Content) is returned with the X-Storage-Url and X-Auth-Token headers. Any 2xx response is a good response. For example, a 202 response means the request has been accepted. Also, additional X- headers may be returned. These additional headers are related to other Rackspace services and can be ignored. An HTTP status of 401 (Unauthorized) is returned upon authentication failure. All subsequent container/object operations against OpenStack Object Storage should be 1
8 made against the URI specified in X-Storage-Url and must include the X-Auth-Token header. Example 1.2. Authentication HTTP Response HTTP/ No Content Date: Mon, 12 Nov :32:21 GMT Server: Apache X-Storage-Url: Content-Length: 0 Content-Type: text/plain; charset=utf-8 The X-Storage-Url will need to be parsed and used in the connection and request line of all subsequent requests against Object Storage. In the example response above, users connecting to OpenStack Object Storage would send most container/object requests with a host header of storage.swiftdrive.com and the request line's version and account as /v1/cf_xer7_34. Note that authentication tokens are valid for a 24 hour period for many authentication configurations Overview of API Operations The OpenStack Object Storage API is implemented as a set of ReSTful (Representational State Transfer) web services. All authentication and container/object operations can be performed with standard HTTP calls. See the Wikipedia article on ReST for more information The following constraints apply to the ReST API's HTTP requests: Maximum number of HTTP headers per request: 90 Maximum length of all HTTP headers: 4096 bytes Maximum length per HTTP request line: 8192 bytes Maximum length of HTTP request: 5 gigabytes Maximum length of container name: 256 bytes Maximum length of object name: 1024 bytes Container and object names should be properly URL-encoded prior to interacting with the ReST interface (the language APIs handle URL encoding/decoding) and the container and object names must be UTF-8 encoded. The length restrictions should be checked against the URL-encoded string. Each ReST request against the OpenStack Object Storage system requires the inclusion of a specific authorization token HTTP header defined as X-Auth-Token. Clients obtain this token, along with the OpenStack Object Storage URLs, by first using the Authentication service and supplying a valid Username and API Access Key. The ReST service identified with X-Storage-Url is used for managing the data stored in the system. Example operations are creating containers and uploading objects. 2
9 In the following sections, the purpose of each HTTP method depends upon which service the call is made against. For example, a PUT request against X-Storage-Url can be used to create a container or upload an object. The language-specific APIs mask this system separation from the programmer. They simply create a container and mark it public and it handles calling out to the appropriate back-end services using the appropriate ReST API. Note All requests to authenticate and operate against OpenStack Object Storage are performed using SSL over HTTP (HTTPS) on TCP port
10 2. API Operations for Storage Services Table of Contents 2.1. Storage Account Services List Containers Get Account Metadata Create or Update Account Metadata Delete Account Metadata Storage Container Services List Objects Create Container Delete Container Get Container Metadata Create or Update Container Metadata Delete Container Metadata Create Static Website Static Web Middleware through swift Set Error Pages for Static Website Storage Object Services Get Object Details Create or Update Object Assigning CORS Headers to Requests Enabling File Compression with the Content-Encoding Header Enabling Browser Bypass with the Content-Disposition Header Expiring Objects with the X-Delete-After and X-Delete-At Headers Object Versioning Copy Object Delete Object Get Object Metadata Update Object Metadata Use the ReST API to interact with the storage component of OpenStack Object Storage. All requests are directed to the host and URL described in the X-Storage-Url HTTP header obtained during successful authentication. Review the following requirements for using storage services: Container names cannot exceed 256 bytes and cannot contain a '/' character. Object names cannot exceed 1024 bytes and have no character restrictions. Object and container names must be URL-encoded and UTF-8 encoded. The following sections describe the actions that you can perform in the storage system. Section 2.1, Storage Account Services [5] describes the actions that you can perform at the account level of the storage system. 4
11 Section 2.2, Storage Container Services [10] describes the actions that you can perform on containers. Section 2.3, Create Static Website [18] describes how to use your swift account to create a static website. Section 2.4, Storage Object Services [19] describes the actions that you can perform on objects Storage Account Services Perform the following operations at the account level of the URL: Verb URI Description GET /account Lists containers. HEAD /account Gets account metadata. POST /account Creates or updates account metadata. POST /account Deletes account metadata. For example, the URL for the requests end with the OpenStack Object Storage account string, as follows: Example 2.1. Storage Account Services HTTP Request <METHOD> /v1/<account> HTTP/ List Containers GET operations against the X-Storage-Url for an account are performed to retrieve a list of existing storage containers ordered by name. The sort order for the name is based on a binary comparison, a single built-in collating sequence that compares string data using SQLite's memcmp() function, regardless of text encoding. The following list describes the optional query parameters that are supported with this request. Query Parameters limit marker end_marker format For an integer value n, limits the number of results to n values. Given a string value x, return container names greater in value than the specified marker. Given a string value x, return container names less in value than the specified marker. Specify either json or xml to return the respective serialized response. At this time, a prefix query parameter is not supported at the account level. Example 2.2. List Containers HTTP Request GET /<api version>/<account> HTTP/1.1 Host: storage.swiftdrive.com 5
12 A list of containers is returned in the response body, one container per line. A 204 (No Content) HTTP return code will be passed back if the account has no containers. Example 2.3. List Containers HTTP Response HTTP/ Ok Date: Thu, 07 Jun :57:07 GMT Server: Apache Content-Type: text/plain; charset=utf-8 Content-Length: 32 images movies documents backups Serialized List Output If a format=xml or format=json argument is appended to the storage account URL, the service serves extended container information serialized in the chosen format. The sample responses are formatted for readability. The following HTTP request asks for a JSON response, so the response returns an HTTP header and a JSON response. Example 2.4. Get Containers Details HTTP and JSON Request GET /<api version>/<account>?format=json HTTP/1.1 Host: storage.swiftdrive.com Content-Length: 0 X-Storage-Token: 182f9c0af0e828cfe d29d19f4 Example 2.5. Get Containers Details HTTP and JSON Response HTTP/ OK Date: Tue, 25 Nov :39:13 GMT Server: Apache Content-Type: application/json; charset=utf-8 [ ] {"name":"test_container_1", "count":2, "bytes":78}, {"name":"test_container_2", "count":1, "bytes":17} The following HTTP request asks for an XML response, so the response returns an HTTP header and an XML response. Example 2.6. Containers Details HTTP and XML Request HTTP/ OK Date: Tue, 25 Nov :42:35 GMT Server: Apache Content-Type: application/xml; charset=utf-8 Example 2.7. Containers Details HTTP and XML Response HTTP/ OK 6
13 Date: Tue, 25 Nov :42:35 GMT Server: Apache Content-Type: application/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <account name="michaelbarton"> <container> <name>test_container_1</name> <count>2</count> <bytes>78</bytes> </container> <container> <name>test_container_2</name> <count>1</count> <bytes>17</bytes> </container> </account> Controlling a Large List of Containers The system returns a maximum of 10,000 container names per request. To retrieve subsequent container names, another request must be made with the 'marker' parameter. The marker indicates where the last list left off; the system returns container names greater than this marker, up to 10,000 again. Note that the marker value should be URL-encoded prior to sending the HTTP request. If 10,000 is larger than desired, use the 'limit' parameter. If the number of container names returned equals the limit given (or 10,000 if no limit is given), you may assume there are more container names. Example 2.8. List Large Number of Containers For example, let's use a listing of five container names: apples bananas kiwis oranges pears We'll use a limit of two to show how things work: GET /<api version>/<account>?limit=2 Host: storage.swiftdrive.com apples bananas Because we received two items back, we can assume there are more container names to list, so we make another request with a marker of the last item returned: GET /<api version>/<account>?limit=2&marker=bananas Host: storage.swiftdrive.com kiwis oranges 7
14 Again, two items are returned; there might be more: GET /<api version>/<account>?limit=2&marker=oranges Host: storage.swiftdrive.com pears With this one-item response we received less than the limit number of container names, indicating that this is the end of the list. By using end_marker we can limit the result set to container names less than the given value. GET /<api version><account>?end_marker=oranges Host: storage.swiftdrive.com apples bananas kiwis Get Account Metadata HEAD operations against an account are performed to retrieve the number of containers and the total bytes stored in OpenStack Object Storage for the account. This information is returned in two custom headers, X-Account-Container-Count and X-Account- Bytes-Used. Since the storage system is designed to store large amounts of data, care should be taken when representing the total bytes response as an integer; when possible, convert it to a 64-bit unsigned integer if your platform supports that primitive type. Example 2.9. Get Account Metadata HTTP Request HEAD /<api version>/<account> HTTP/1.1 Host: storage.swiftdrive.com The HTTP return code will be 204 (No Content) if the request succeeds. A 401 (Unauthorized) will be returned for an invalid account or access key. Example Get Account Metadata HTTP Response HTTP/ No Content Date: Thu, 07 Jun :57:07 GMT Server: Apache X-Account-Container-Count: 3 X-Account-Bytes-Used: Create or Update Account Metadata You can associate custom metadata headers with the account level URI. These headers must take the format X-Account-Meta-*. To create or update an account metadata header use the POST query. Subsequent requests for the same key/value pair overwrite the previous value. 8
15 Example Update Account Metadata HTTP Request POST /<api version>/<account> HTTP/1.1 Host: storage.clouddrive.com X-Account-Meta-Book: MobyDick X-Account-Meta-Subject: Whaling No response body is returned. A status code of 204 (No Content) indicates success. Example Update Account Metadata HTTP Response HTTP/ No Content Content-Length: 0 Content-Type: text/html; charset=utf-8 Date: Sat, 09 Jun :16:29 GMT To confirm your metadata changes, perform a HEAD request on the account. Do not send the metadata in your HEAD request. Example View Account Metadata HTTP Request HEAD /<api version>/<account> HTTP/1.1 Host: storage.clouddrive.com Example View Account Metadata HTTP Response HTTP/ No Content X-Account-Meta-Book: MobyDick X-Account-Meta-Subject: Whaling X-Account-Object-Count: 5 X-Timestamp: X-Account-Container-Count: 5 X-Account-Bytes-Used: Accept-Ranges: bytes Content-Length: 0 Date: Sat, 09 Jun :16:59 GMT Delete Account Metadata To delete a metadata header send an empty value for that particular header, such as X- Account-Meta-Book. If the tool you're using to communicate with Swift doesn't support sending empty headers (such as older versions of curl) send the header "X-Remove-Account-Meta-name: arbitrary value", such as X-Remove-Account-Meta-Book: x. The value is ignored. Example Delete Account Metadata HTTP Request POST /<api version>/<account> HTTP/1.1 Host: storage.clouddrive.com X-Remove-Account-Meta-Book: x No response body is returned. A status code of 204 (No Content) indicates success. 9
16 2.2. Storage Container Services You can perform the following operations for containers: Verb URI Description GET /account/container Lists objects. PUT /account/container Creates a container. DELETE /account/container Deletes a container. HEAD /account/container Gets container metadata. All operations follow this format: Example Storage Container Services HTTP Request METHOD /v1/<account>/<container> HTTP/ List Objects GET operations against a storage container name are performed to retrieve a list of objects stored in the container. Additionally, there are a number of optional query parameters that can be used to refine the list results. A request with no query parameters will return the full list of object names stored in the container, up to 10,000 names. Optionally specifying the query parameters will filter the full list and return a subset of objects. Query Parameters limit marker end_marker prefix format delimiter path For an integer value n, limits the number of results to at most n values. Given a string value x, return object names greater in value than the specified marker. Given a string value x, return object names less in value than the specified marker. For a string value x, causes the results to be limited to object names beginning with the substring x. Specify either json or xml to return the respective serialized response. For a character c, return all the object names nested in the container (without the need for the directory marker objects). For a string valuex, return the object names nested in the pseudo path. Equivalent to setting delimiter to '/' and prefix to the path with a '/' on the end. Example List Objects HTTP Request GET /<api version>/<account>/<container>[?parm=value] HTTP/1.1 Host: storage.swiftdrive.com 10
17 A list of objects is returned in the response body, one object name per line. A 204 (No Content) HTTP return code will be passed back if the container is empty. If the container does not exist, a 404 code will return. If an incorrect account is specified, the HTTP return code will be 404 (Not Found). Example List Objects HTTP Response HTTP/ Ok Date: Thu, 07 Jun :50:19 GMT Server: Apache Content-Type: text/plain; charset=utf-8 Content-Length: 171 kate_beckinsale.jpg How To Win Friends And Influence People.pdf moms_birthday.jpg poodle_strut.mov Disturbed - Down With The Sickness.mp3 army_of_darkness.avi the_mad.avi Serialized List Output If a format=xml or format=json argument is appended to the storage account URL, the service will serve extended object information serialized in the chosen format. Other than the?format=xml json parameter, it will return the same status/errors codes. The sample responses below are formatted for readability. Example Get Objects Details HTTP and JSON Request GET /<api version>/<account>/<container>?format=json HTTP/1.1 Host: storage.swiftdrive.com Content-Length: 0 X-Storage-Token: 182f9c0af0e828cfe d29d19f4 Example Get Objects Details HTTP and JSON Response HTTP/ OK Date: Tue, 25 Nov :39:13 GMT Server: Apache Content-Length: 387 Content-Type: application/json; charset=utf-8 [ ] {"name":"test_obj_1", "hash":"4281c348eaf83e70ddce0e07221c3d28", "bytes":14, "content_type":"application\/octet-stream", "last_modified":" t05:26: "}, {"name":"test_obj_2", "hash":"b039efe731ad111bc1b0ef221c3849d0", "bytes":64, "content_type":"application\/octet-stream", "last_modified":" t05:26: "}, 11
18 Example Objects Details Request: XML GET /<api version>/<account>/<container>?format=xml HTTP/1.1 Host: storage.swiftdrive.com X-Storage-Token: 182f9c0af0e828cfe d29d19f4 Example Objects Details Request: XML HTTP/ OK Date: Tue, 25 Nov :42:35 GMT Server: Apache Content-Length: 643 Content-Type: application/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <container name="test_container_1"> <object> <name>test_object_1</name> <hash>4281c348eaf83e70ddce0e07221c3d28</hash> <bytes>14</bytes> <content_type>application/octet-stream</content_type> <last_modified> t05:26: </last_modified> </object> <object> <name>test_object_2</name> <hash>b039efe731ad111bc1b0ef221c3849d0</hash> <bytes>64</bytes> <content_type>application/octet-stream</content_type> <last_modified> t05:26: </last_modified> </object> </container> Controlling a Large List of Objects The system returns a maximum of 10,000 object names per request. To retrieve subsequent object names, another request must be made with the 'marker' parameter. The marker indicates where the last list left off and the system returns object names greater than this marker, up to 10,000 again. Note that the marker value should be URL encoded prior to sending the HTTP request. If 10,000 is larger than desired, a 'limit' parameter may be given. If the number of object names returned equals the limit given (or 10,000 if no limit is given), it can be assumed there are more object names to be listed. If the container name list is exactly divisible by the limit, the last request has no content. Example List Large Number of Objects For an example, let's use a listing of five object names: gala grannysmith honeycrisp jonagold reddelicious We'll use a limit of two to show how things work: 12
19 GET /<api version>/<account>/<container>?limit=2 Host: storage.swiftdrive.com gala grannysmith Because we received two items back, we can assume there are more object names to list. So, we make another request with a marker of the last item returned: GET /<api version>/<account>/<container>?limit=2&marker=grannysmith Host: storage.swiftdrive.com honeycrisp jonagold Again we have two items returned; there might be more: GET /<api version>/<account>/<container>?limit=2&marker=jonagold Host: storage.swiftdrive.com reddelicious Now we received less than the limit number of object names, indicating that we have the complete list. By using end_marker we can limit the result set to object names less than the given value. GET /<api version><account>/<container>?end_marker=jonagold Host: storage.swiftdrive.com gala grannysmith honeycrisp Pseudo-Hierarchical Folders and Directories Although you cannot nest directories in OpenStack Object Storage, you can simulate a hierarchical structure within a single container by adding forward slash characters (/) in the object name. To navigate the pseudo-directory structure, you may use the delimiter query parameter. See the below examples for an illustration. Note In the example below, the objects reside in a container called backups. Within that container, the objects are organized in a pseudo-directory called photos. Keep in mind that the container name is not displayed in the example, but that it is a part of the object URLs. For instance, the URL of the picture me.jpg is photos/me.jpg. 13
20 Example List Pseudo-Hierarchical Folders/Directories Request To display a list of all the objects in the storage container, use GET without a delimiter or prefix. GET /v1/accountstring/backups The system returns status code 200 (OK) and the requested list of the objects. photos/animals/cats/persian.jpg photos/animals/cats/siamese.jpg photos/animals/dogs/corgi.jpg photos/animals/dogs/poodle.jpg photos/animals/dogs/terrier.jpg photos/me.jpg photos/plants/fern.jpg photos/plants/rose.jpg Use the delimiter parameter to limit the displayed results. Any character may be used as a delimiter. However, to use delimiter with pseudo-directories, use the parameter slash (/). GET /v1/accountstring/backups?delimiter=/ The system returns status code 200 (OK) and the requested matching objects. Because we use the slash, only the pseudo-directory photos/ displays. Keep in mind that the returned values from a slash delimiter query are not real objects. They have a content-type of application/directory and are in a subdir section of json and xml results. photos/ Use the prefix parameter with the delimiter parameter to view the objects inside a pseudo-directory, including further nested pseudo-directories. GET /v1/accountstring/backups?prefix=photos/&delimiter=/ The system returns status code 200 (OK) and the objects and pseudo-directories within the top level pseudo-directory. photos/animals/ photos/me.jpg photos/plants/ There is no limit to the amount of nested pseudo-directories you can create. In order to navigate through them, use a longer prefix parameter coupled with the delimiter parameter. In the sample output below, there is a pseudo-directory called dogs within the pseudo-directory animals. In order to navigate directly to the files contained within dogs, enter the below command. GET /v1/accountstring/backups?prefix=photos/animals/dogs/&delimiter=/ The system returns status code 200 (OK) and the objects and pseudo-directories within the nested pseudo-directory. photos/animals/dogs/corgi.jpg photos/animals/dogs/poodle.jpg photos/animals/dogs/terrier.jpg 14
21 Create Container PUT operations against a storage container are used to create that container. Containers are storage compartments for your data. The URL encoded name must be less than 256 bytes and cannot contain a forward slash '/' character. Containers can be assigned custom metadata by including additional HTTP headers on the PUT request. The custom metadata is assigned to a container via HTTP headers identified with the X-Container-Meta- prefix. Example Create Container HTTP Request PUT /<api version>/<account>/<container> HTTP/1.1 Host: storage.swiftdrive.com No content is returned. A status code of 201 (Created) indicates that the container was created as requested. Container PUT requests are idempotent and a code of 202 (Accepted) is returned when the container already existed. If you request a PUT to a container with an X-Container-Meta- prefix in the header, your GET/HEAD request responses carry the metadata prefix from the container in subsequent requests. Example Create Container HTTP Response HTTP/ Created Date: Thu, 07 Jun :50:19 GMT Server: Apache Content-Type: text/plain; charset=utf-8 Using custom container metadata, you can create information in the header to effectively "tag" a container with metadata. The container metadata restrictions are the same as object metadata: you can have 4096 bytes maximum overall metadata, 90 distinct metadata items at the most. Each may have a 128 character name length with a 256 max value length each. Any valid UTF-8 http header value is allowed for metadata, however we recommend that you URL-encode any non-ascii values using a "%" symbol, followed by the two-digit hexadecimal representation of the ISO-Latin code for the character. Example Container Create Container with Metadata HTTP Request PUT /<api version>/<account>/<container> HTTP/1.1 Host: storage.clouddrive.com X-Container-Meta-InspectedBy: JackWolf No content is returned. A status code of 201 (Created) indicates that the container was created as requested. Container PUT requests are idempotent and a code of 202 (Accepted) is returned if the container existed prior to the request. If you request a PUT to a container with an X-Container-Meta- prefix in the header, your GET/HEAD request responses carry the metadata prefix from the container in subsequent requests. Example Create Container with Metadata HTTP Response HTTP/ Created 15
22 Date: Thu, 07 Jun :50:19 GMT Server: Apache Content-Type: text/plain; charset=utf Delete Container DELETE operations against a storage container permanently remove it. The container must be empty before it can be deleted. A HEAD request against the container can be used to determine if it contains any objects. Example Delete Container HTTP Request DELETE /<api version>/<account>/<container> HTTP/1.1 Host: storage.swiftdrive.com No content is returned. A status code of 204 (No Content) indicates success, 404 (Not Found) is returned if the requested container was not found, and a 409 (Conflict) if the container is not empty. No response body is generated. Example Delete Container HTTP Response HTTP/ No Content Date: Thu, 07 Jun :57:07 GMT Server: Apache Content-Length: 0 Content-Type: text/plain; charset=utf Get Container Metadata HEAD operations against a storage container are used to determine the number of objects, and the total bytes of all objects stored in the container. Since the storage system is designed to store large amounts of data, care should be taken when representing the total bytes response as an integer; when possible, convert it to a 64-bit unsigned integer if your platform supports that primitive type. Example Get Container Metadata HTTP Request HEAD /<api version>/<account>/<container> HTTP/1.1 Host: storage.swiftdrive.com The HTTP return code will be 204 (No Content) if the container exists, and 404 (Not Found) if it does not. The object count and utilization are returned in the X-Container- Object-Count and X-Container-Bytes-Used headers respectively. Example Get Container Metadata HTTP Response HTTP/ No Content Date: Wed, 11 Jul :37:41 GMT Content-type: text/html X-Container-Object-Count: 7 X-Container-Bytes-Used: 413 X-Container-Meta-InspectedBy: JackWolf 16
23 Create or Update Container Metadata You may create any custom or arbitrary metadata headers as you find useful. They must, however, take the format X-Container-Meta-. To create or update the arbitrary container metadata, use the POST query. Subsequent requests of the same key/value pair overwrites the previous value. Example Update Container Metadata HTTP Request POST /<api version>/<account>/<container>/ HTTP/1.1 Host: storage.clouddrive.com X-Container-Meta-Book: MobyDick X-Container-Meta-Subject: Whaling No response body is returned. A status code of 204 (No Content) indicates success; status 404 (Not Found) is returned when the requested container does not exist. Example Update Container Metadata HTTP Response HTTP/ No Content Date: Thu, 07 Mar :42:51 GMT Server: Apache Content-Length: 0 Content-Type: text/plain; charset=utf-8 To confirm your metadata changes, perform a HEAD request on the container. Do not send the metadata in your HEAD request. Example View Container Metadata HTTP Request HEAD /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Example View Container Metadata HTTP Response HTTP/ No Content X-Container-Object-Count: 0 X-Trans-Id: tx028b40d228534c759f4d5fa69f8cf7fd X-Container-Meta-Book: MobyDick X-Container-Meta-Subject: Whaling Accept-Ranges: bytes Date: Mon, 12 Mar :40:20 GMT Content-Length: 0 X-Container-Bytes-Used: Delete Container Metadata To delete a metadata header send an empty value for that particular header, such as X- Container-Meta-Book:. If the tool you're using to communicate with Object Storage doesn't support sending empty headers (older versions of curl) send the header "X-Remove-Container-Meta-name: 17
24 arbitrary value". For example, send a header like X-Remove-Container-Meta- Book: x. The value (x in this example) is ignored. Example Delete Container Metadata HTTP Request POST /<api version>/<account>/<container> HTTP/1.1 Host: storage.clouddrive.com X-Remove-Container-Meta-Book: x No response body is returned. A status code of 204 (No Content) indicates success Create Static Website You can use your swift account to create a static website. This mode is normally only active for anonymous requests. To use it with authenticated requests, set the header X-Web- Mode to TRUE on the request. The staticweb filter should be added to the pipeline in your /etc/swift/proxy-server.conf file just after any auth middleware. Beneath the pipeline, the staticweb middleware configuration must be added. For example: [DEFAULT]... [pipeline:main] pipeline = healthcheck cache tempauth staticweb proxy-server... [filter:staticweb] use = egg:swift#staticweb # Seconds to cache container x-container-meta-web-* header values. # cache_timeout = 300 # You can override the default log routing for this filter here: # set log_name = staticweb # set log_facility = LOG_LOCAL0 # set log_level = INFO # set access_log_name = staticweb # set access_log_facility = LOG_LOCAL0 # set access_log_level = INFO # set log_headers = False Your publicly readable containers will be checked for two headers, X-Container-Meta- Web-Index and X-Container-Meta-Web-Error. (The latter header is discussed below, under Set Error Pages for Static Website.) With X-Container-Meta-Web-Index, you determine the index file (or default page served, such as index.html) displays your website. When someone initially enters your site, they don't have to specify the index file; index.html file displays automatically. If you create sub-directories for your site--which you do by creating pseudo-directories in your container--the index page displays by default for each sub-directory. If your pseduo-directory does not have a file with the same name as your index file, visits to the sub-directory return a 404 error. You also have the option of displaying a list of files in your pseudo-directory instead of a web page. You do this by setting the X-Container-Meta-Web-Listings header to TRUE. You may add style to your file listing by setting X-Container-Meta-Web- Listings-CSS: to a stylesheet (i.e., lists.css). 18
25 Static Web Middleware through swift Example Make Container Publicly Readable Make the container publicly readable. Once the container is publicly readable, you may access your objects directly, but you will need to set the index file to browse the main site URL and its sub-directories. swift post -r '.r:*' container Example Set Site Index File Set the index file. In this case, index.html is the default file displayed when the site displays. swift post -m 'web-index:index.html' container Example Enable File Listing Turn on file listing. If you do not set the index file, list the objects in the container. Instructions on styling the list with the CSS follow. swift post -m 'web-listings: true' container Example Enable CSS for File Listing Style the file listing. swift post -m 'web-listings-css:listings.css' container Set Error Pages for Static Website You can create and set custom error pages for visitors to your website; currently, only 401 (Unauthorized) and 404 (Not Found) errors are supported. To do this, set the metadata header, X-Container-Meta-Web-Error. Error pages are served with the <status> code pre-pended to the name of the error page you set. For instance, if you set X-Container-Meta-Web-Error to error.html, 401 errors will display the page 401error.html. Similarly, 404 errors will display 404error.html. You must have both of these pages created in your container when you set the X-Container-Meta-Web-Error metadata, or your site will display generic error pages. Set the X-Container-Meta-Web-Error metadata once for your entire static website. Example Set Error Pages for Static Website Request swift post -m 'web-error:error.html' container Any 2xx response indicates success Storage Object Services An object represents the data and any metadata for the files stored in the system. Through the ReST interface, metadata for an object can be included by adding custom HTTP headers 19
26 to the request and the data payload as the request body. Objects cannot exceed 5GB and must have names that do not exceed 1024 bytes after URL encoding. However, objects larger than 5GB can be segmented and then concatenated together so that you can upload 5 GB segments and download a single concatenated object. You can work with the segments and manifests directly with HTTP requests. Verb URI Description GET /account/container/object Gets object details. PUT /account/container/object Creates or updates object. PUT /account/container/object Chunked transfer encoding DELETE /account/container/object Deletes container. HEAD /account/container/object Gets object metadata. POST /account/container/object Updates object metadata Get Object Details GET operations against an object are used to retrieve the object's data. Note that you can perform conditional GET requests by using certain HTTP headers as documented in RFC OpenStack Object Storage supports the following headers: RFC 2616: If-Match If-None-Match If-Modified-Since If-Unmodified-Since It is also possible to fetch a portion of data using the HTTP Range header. At this time, OpenStack Object Storage does not support the full specification for Range but basic support is provided. OpenStack Object Storage only allows a single range that includes OFFSET and/or LENGTH. We support a sub-set of Range and do not adhere to the full RFC-2616 specification. We support specifying OFFSET-LENGTH where either OFFSET or LENGTH can be optional (not both at the same time). The following are supported forms of the header: Range: bytes=-5 - last five bytes of the object Range: bytes= the five bytes after a 10-byte offset Range: bytes=32- - all data after the first 32 bytes of the object Example Get Object Details HTTP Request GET /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com The object's data is returned in the response body. Object metadata is returned as HTTP headers. A status of 200 (Ok) indicates success; status 404 (Not Found) is returned if no such object exists. 20
27 Example Get Object Details HTTP Response HTTP/ Ok Date: Wed, 11 Jul :37:41 GMT Server: Apache Last-Modified: Fri, 12 Jun :40:18 GMT ETag: b0dffe8254d152d8fd28f3c5e0404a10 Content-type: text/html Content-Length: [... ] Create or Update Object PUT operations are used to write, or overwrite, an object's content and metadata. You can ensure end-to-end data integrity by including an MD5 checksum of your object's data in the ETag header. You are not required to include the ETag header, but it is recommended to ensure that the storage system successfully stored your object's content. You can cause an object to expire after a certain date by using the X-Delete-At or X- Delete-After headers during an object PUT operation. When Cloud Files detects one of these headers, the system automatically stops serving that object at the specified time and shortly after the expiration date, it removes the object from the storage system. The HTTP response will include the MD5 checksum of the data written to the storage system. If you do not send the ETag in the request, you should compare the value returned with your content's MD5 locally to perform the end-to-end data validation on the client side. For segmented objects, the ETag is the MD5 sum of the concatenated string of ETags for each of the segments in the manifest, which only offers change detection but not direct comparison. Objects can be assigned custom metadata by including additional HTTP headers on the PUT request. The object can be created with custom metadata via HTTP headers identified with the X- Object-Meta- prefix. Example Create or Update Object HTTP Request PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: X-Object-Meta-PIN: 1234 [... ] No response body is returned. A status code of 201 (Created) indicates a successful write; status 411 (Length Required) denotes a missing Content-Length or Content-Type header in the request. If the MD5 checksum of the data written to the storage system does NOT match the (optionally) supplied ETag value, a 422 (Unprocessable Entity) response is returned. 21
28 Example Create or Update Object HTTP Response HTTP/ Created Date: Thu, 07 Jun :57:07 GMT Server: Apache ETag: d9f5eb4bba4e2f2f046e54611bc8196b Content-Length: 0 Content-Type: text/plain; charset=utf Create Large Objects Objects that are larger than 5GB must be segmented, prior to upload. You then upload the segments like you would any other object and create a manifest object telling OpenStack Object Storage how to find the segments of the large object. The segments remain individually addressable, but retrieving the manifest object streams all the segments concatenated. There is no limit to the number of segments that can be a part of a single large object. To ensure the download works correctly, you must upload all the object segments to the same container, ensure each object name has a common prefix where their names sort in the order they should be concatenated. You also create and upload a manifest file. The manifest file is simply a zero-byte file with the extra X-Object-Manifest: <container>/ <prefix> header, where <container> is the container the object segments are in and <prefix> is the common prefix for all the segments. It is best to upload all the segments first and then create or update the manifest. With this method, the full object will not be available for downloading until the upload is complete. Also, you can upload a new set of segments to a second location and then update the manifest to point to this new location. During the upload of the new segments, the original manifest will still be available to download the first set of segments. Example Upload Segment of Large Object HTTP Request PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: 1 X-Object-Meta-PIN: 1234 Example Upload Segment of Large Object HTTP Response s No response body is returned. A status code of 201 (Created) indicates a successful write; status 411 (Length Required) denotes a missing Content-Length or Content-Type header in the request. If the MD5 checksum of the data written to the storage system does NOT match the (optionally) supplied ETag value, a 422 (Unprocessable Entity) response is returned. You can continue uploading segments like this example shows, prior to uploading the manifest. Example Upload Next Segment of Large Object HTTP Request PUT /<api version>/<account>/<container>/<object> HTTP/1.1 22
29 Host: storage.clouddrive.com ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: 1 X-Object-Meta-PIN: 1234 Example Upload Next Segment of Large Object HTTP Response w Next, upload the manifest you created that indicates the container the object segments reside within. Note that uploading additional segments after the manifest is created will cause the concatenated object to be that much larger but you do not need to recreate the manifest file for subsequent additional segments. Example Upload Manifest HTTP Request PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Content-Length: 0 X-Object-Meta-PIN: 1234 X-Object-Manifest: container/object/segments Example Upload Manifest HTTP Response [...] The response's Content-Type for a GET or HEAD on the manifest will be the same as the Content-Type set during the PUT request that created the manifest. You can easily change the Content-Type by reissuing the PUT request Chunked Transfer Encoding Users can upload data without needing to know in advance the amount of data to be uploaded. Users can do this by specifying an HTTP header of Transfer-Encoding: chunked and not using a Content-Length header. A good use of this feature would be doing a DB dump, piping the output through gzip, then piping the data directly into OpenStack Object Storage without having to buffer the data to disk to compute the file size. If users attempt to upload more than 5GB with this method, the server will close the TCP/IP connection after 5GB and purge the customer data from the system. Users must take responsibility for ensuring the data they transfer will be less than 5GB or for splitting it into 5GB chunks, each in its own storage object. If you have files that are larger than 5GB and still want to use Object Storage, you can segment them prior to upload, upload them to the same container, and then use a manifest file to allow downloading of a concatenated object containing all the segmented objects, concatenated as a single object. Example Upload Unspecified Quantity of Content HTTP Request PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com Transfer-Encoding: chunked X-Object-Meta-PIN:
30 Example Upload Unspecified Quantity of Content HTTP Response 19 A bunch of data broken up D into chunks Assigning CORS Headers to Requests CORS is a specification that stands for Cross-Origin Resource Sharing. It defines how browsers and servers communicate across origins using HTTP headers, such as those assigned by Cloud Files API requests. These headers are supported with the Cloud Files API. You can read more about the definition of the Access-Control- response headers and Origin response header at Access-Control-Allow-Credentials Access-Control-Allow-Methods Access-Control-Allow-Origin Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Request-Headers Access-Control-Request-Method Origin You can assign these headers to objects only. Example Assign CORS Header HTTP Request In the example, the origin header is assigned that indicates where the file came from. This allows you to provide security that requests to your Cloud Files repository are indeed from the correct origination: PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Origin: Enabling File Compression with the Content-Encoding Header The Content-Encoding header allows a file to be compressed without losing the identity of the underlying media type of the file, for example, a video. Example Content-Encoding Header HTTP Request In the example, the content-encoding header is assigned with an attachment type that indicates how the file should be downloaded: 24
31 PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Content-Type: video/mp4 Content-Encoding: gzip Enabling Browser Bypass with the Content- Disposition Header When an object is assigned the Content-Disposition header you can override a browser's default behavior for a file so that the download program saves the file rather than displaying it using default browser settings. Example Content-Disposition Header HTTP Request In the example, the content-encoding header is assigned with an attachment type that indicates how the file should be downloaded. PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Content-Type: image/tiff Content-Disposition: attachment; filename=platmap.tif Expiring Objects with the X-Delete-After and X-Delete- At Headers When an object is assigned either an X-Delete-After or X-Delete-At header when doing a PUT or POST on the object, it is scheduled for deletion. This feature is helpful for objects you do not want to permanently store, such as log files, recurring full backups of a dataset, or documents or images you know will be outdated at a future time. The X-Delete-At header requires a Unix Epoch timestamp, in integer form; for example: represents Wed, 26 Sep :38:25 GMT. By setting the header to a specific Epoch time, you indicate when you want the object to expire, not be served, and be deleted completely from the storage system. The X-Delete-After header takes an integer number of seconds and calculates the amount of time from now that you want the object to be deleted. The proxy server that receives the request converts this header into an X-Delete-At header and calculates the deletion time using its current time plus the value given in seconds. For existing objects that you want to assign expiration headers to, use the POST operation. Example Delete Object at HTTP Request In the example, the X-Delete-At header is assigned with a Unix Epoch timestamp in integer form for Mon, 11 Jun :38:25 GMT. Use for example timestamps and a batch converter. PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com 25
32 Content-Type: image/jpeg X-Delete-At: Example Delete Object after HTTP Request In this example, the X-Delete-After header is assigned a value in seconds, equivalent to 10 days. After this time, the object expires. PUT /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.clouddrive.com Content-Type: image/jpeg X-Delete-After: Object Versioning Object Versioning allows you to store multiple versions of your content to recover from unintended overwrites. It provides an easy method to implement version control which can be used on any type of content. It is strongly recommended that you put non-current objects in a container apart from where the current versions exist. Once you enable Object Versioning on a container (such as a "current version" container), PUTs to existing objects in that container copy the prior object to a separate "non-current version" container. Each of the non-current versions of an object has a time stamp appended to it, so you know when it was created. To enable Object Versioning, your cloud provider has to set allow_versions to TRUE in their container config. Then, create a container where your non-current versions will be written. Next, set the metadata X-Versions-Location header on the container that holds the current versions of your objects. Set the metadata header to point to the new non-current version container you created. This is where your non-current versions will be stored. Once this is done, each object in your current-version container will have Object Versioning enabled; changes to the objects automatically create non-current versions in the separate container. Nothing is written to the non-current version container when you initially PUT an object into the current-version container. Only when you make edits to the objects via PUT will you create non-current versions. These non-current versions are labeled according to the schema below. Naming Schema: Non-current versions are assigned the name <length><object_name>/ <timestamp>, where length is the 3-character zero-padded hexadecimal character length of the <object_name> and <timestamp> is when the it was initially created as a current version. Any return status in the 2xx range, such as 202 (Accepted), notes success. Status codes in the 4xx or 5xx range note failure. You should retry your request if you receive an error. Please note, however, that if you have specified a container that does not exist as your noncurrent version container, a status of 412 (Precondition Failed) returns when you edit the versioned object. If you receive this error, check that the container exists. A GET to a versioned object returns the current version of the object without having to do any request redirects or metadata lookups. 26
33 A POST to a versioned object only updates the object's metadata; it does not create a new version of the object. In other words, new versions are only created when the content of the object changes. A DELETE to a versioned object removes the current version of the object and replaces it with the next-most current version, moving it from the non-current container to the current. This next-most current version carries with it any metadata last set on it. If want to completely remove an object and you have five total versions of it, you must DELETE it five times. Note A large-object manifest file cannot be versioned, but it may point to versioned segments. To turn off Object Versioning on your current version container, remove its X-Versions- Location metadata by sending an empty key value. Example Object Versioning with curl Make sure a version-storing container exists, creating it if necessary (this example names it "versions"). Then create a container with the X-Versions-Location header. In this example, this container is named "current". You can also add the X-Versions-Location header to an existing container. In this example, the name of the container is versions ; the location for the current version is the container "current". Create a container named versions. curl -i -XPUT -H "X-Auth-Token: <token>" Create a container named current with the X-Versions-Location header that references "versions". curl -i -XPUT -H "X-Auth-Token: <token>" \ -H "X-Versions-Location: versions" Create an object (the first version): curl -i -XPUT --data-binary 1 -H "X-Auth-Token: <token>" \ Now create a new version of that object: curl -i -XPUT --data-binary 2 -H "X-Auth-Token: <token>" \ See a listing of the older versions of the object: 27
34 curl -i -H "X-Auth-Token: <token>" \ Now delete the current version of the object and see that the older version is gone: curl -i -XDELETE -H "X-Auth-Token: <token>" \ curl -i -H "X-Auth-Token: <token>" \ Copy Object Suppose you upload a file with the wrong object name or content type, or you needed to move some objects to another container. Without a server-side copy feature, you would need to repeat uploading the same content and then delete the existing object. With server-side object copy, you can save the step of re-uploading the content and thus also save the associated bandwidth charges, if any were to apply. There are two ways to copy an existing object to another object in OpenStack Object Storage. One way is to do a PUT to the new object (the target) location, but add the X- Copy-From header to designate the source of the data. The header value should be the container and object name of the source object in the form of /container/object. Also, the X-Copy-From PUT requests require a Content-Length header, even if it is zero (0). Example Object Copy Method 1 PUT /<api version>/<account>/<container>/<destobject> HTTP/1.1 Host: <storage URL> X-Auth-Token: <some-auth-token> X-Copy-From: /<container>/<sourceobject> Content-Length: 0 The second way to do an object copy is similar. Do a COPY to the existing object, and include the Destination header to specify the target of the copy. The header value is the container and new object name in the form of /container/object. Example Object Copy Method 2 COPY /<api version>/<account>/<container>/<sourceobject> HTTP/1.1 Host: <storage URL> X-Auth-Token: <some-auth-token> Destination: /<container>/<destobject> With both of these methods, the destination container must exist before attempting the copy. If you wanted to move the object rather than copy it, you need to send a DELETE request to the old object. A move is simply a COPY + DELETE. All metadata is preserved during the object copy. Note that you can set metadata on the request to copy the object (either the PUT or the COPY) and the metadata will overwrite any conflicting keys on the target (new) object. One interesting use case is to copy an object to itself and set the content type to a new value. This is the only way to change the content type of an existing object. 28
35 Delete Object DELETE operations on an object are used to permanently remove an object from the storage system (metadata and data). Deleting an object is processed immediately at the time of the request. Any subsequent GET, HEAD, POST, or DELETE operations will return a 404 (Not Found) error. Objects with the X-Delete-At or X-Delete-After header assigned are deleted within one day of the expiration time and the object is not served immediately after the expiration time. Refer to Expiring Objects for more details. Example Object Delete HTTP Request DELETE /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com No response body is returned. A status code of 204 (No Content) indicates success; status code 404 (Not Found) is returned when the object does not exist. Example Object Delete HTTP Response HTTP/ No Content Date: Thu, 07 Jun :59:39 GMT Server: Apache Content-Type: text/plain; charset=utf Get Object Metadata HEAD operations on an object are used to retrieve object metadata and other standard HTTP headers. The only required header to be sent in the request is the authorization token. Example Get Object Metadata HTTP Request HEAD /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com No response body is returned. Metadata is returned as HTTP headers. A status code of 200 (OK) indicates success; status 404 (Not Found) is returned when the object does not exist. The HEAD return code for the object is different from that of the container. HEAD requests do not return a message body in the response, so anything in the 2xx response code range notes success. When a HEAD query is run against the container, it queries the container databases, and it does not retrieve the content of them, thus the 204 (No Content) return code. However, when a HEAD query is run against the object, it returns an "OK" response because it can view the content. In other words, the object HEAD query has a container length, but the container HEAD query has zero content length. Example Get Object Metadata HTTP Response HTTP/ OK 29
36 Date: Thu, 07 Jun :59:39 GMT Server: Apache Last-Modified: Fri, 12 Jun :40:18 GMT ETag: 8a964ee2a5e88be344f36c22562a6486 Content-Length: Content-Type: text/plain; charset=utf-8 X-Object-Meta-Meat: Bacon X-Object-Meta-Fruit: Bacon X-Object-Meta-Veggie: Bacon X-Object-Meta-Dairy: Bacon Update Object Metadata POST operations against an object name are used to set and overwrite arbitrary key/value metadata or to assign headers not already assigned such as X-Delete-At or X-Delete- After for expiring objects. You cannot use the POST operation to change any of the object's other headers such as Content-Type, ETag, etc. It is not used to upload storage objects (see PUT). Also refer to copying an object when you need to update metadata or other headers such as Content-Type or CORS headers. Key names must be prefixed with X-Object-Meta-. A POST request will delete all existing metadata added with a previous PUT/POST. Example Update Object Metadata HTTP Request POST /<api version>/<account>/<container>/<object> HTTP/1.1 Host: storage.swiftdrive.com X-Object-Meta-Fruit: Apple X-Object-Meta-Veggie: Carrot No response body is returned. A status code of 202 (Accepted) indicates success; status 404 (Not Found) is returned if the requested object does not exist. Example Update Object Metadata HTTP Response HTTP/ Accepted Date: Thu, 07 Jun :59:39 GMT Server: Apache Content-Length: 0 Content-Type: text/plain; charset=utf-8 30
37 3. Troubleshooting and Examples Table of Contents 3.1. Using curl Authentication Determining Storage Usage Listing and Creating Containers Paging Lists of Containers Serialized Output Container Metadata and Deleting Containers Special Metadata: Container ACLs Creating Objects Paging Lists of Objects Retrieve, Copy, and Delete Objects Object Metadata Pseudo-Hierarchical Folders/Directories This section introduces a command-line utility, curl, and demonstrates interacting with the ReST interfaces through that utility Using curl curl is a command-line tool which is available on most UNIX -like environments and Mac OS X and can be downloaded for Windows. For more information on curl, visit curl.haxx.se/. curl allows you to transmit and receive HTTP requests and responses from the commandline or from within a shell script. This makes it possible to work with the ReST API directly without using one of the client APIs. The following curl command-line options will be used curl Command-Line Options -X METHOD Specify the HTTP method to request (HEAD, GET, etc.) -i Dump HTTP response headers to stdout. -H HEADER Specify an HTTP header in the request Authentication In order to use the ReST API, you will first need to obtain a authorization token, which will need to be passed in for each request using the X-Auth-Token header. The following 31
38 example demonstrates how to use curl to obtain the authorization token and the URL of the storage system. Example 3.1. curl Authenticate curl -i \ -H "X-Auth-Key: jdoesecretpassword" \ -H "X-Auth-User: jdoe" \ HTTP/ No Content Date: Thu, 09 Jul :31:39 GMT Server: Apache/2.2.3 X-Storage-Url: X-Auth-Token: fc81aaa6-98a1-9ab0-94ba-aba9a89aa9ae Content-Length: 0 Connection: close Content-Type: application/octet-stream The storage URL and authentication token are returned in the headers of the response. After authentication, you can use curl to perform HEAD, GET, DELETE, POST and PUT requests on the storage service Determining Storage Usage A HEAD request can be sent to the storage service to determine how much data you have stored in the system and the number of containers you are using. Use the -X switch to specify the correct HTTP method and the -i to dump the HTTP response headers to terminal output (stdout). Example 3.2. curl Get Storage Space curl X HEAD -i \ HTTP/ No Content Date: Thu, 09 Jul :38:14 GMT Server: Apache X-Account-Container-Count: 22 X-Account-Bytes-Used: Content-Type: text/plain The HTTP request must include a header to specify the authentication token. The HTTP headers in the response indicate the number of containers in this storage account and the total bytes stored for the entire account. 32
39 3.4. Listing and Creating Containers The simplest operation for Object Storage is to simply list the containers you have, which when you don't have any containers yet isn't terribly exciting: Example 3.3. curl List Storage Container curl X GET -i \ HTTP/ No Content X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 0 Accept-Ranges: bytes X-Trans-Id: txe8ca5138ac8643ec a0c9c91e Content-Length: 0 Date: Mon, 07 Nov :07:01 GMT So, you take the X-Auth-Token obtained from the authentication operation, pass it as a header value, execute the operation against the URL obtained from the authentication operation, and force the GET verb with the -X switch. What you get back tells you there aren't any containers. Next, let's create a container and then do the listing again: Example 3.4. curl Create Storage Container curl X PUT -i \ HTTP/ Created Content-Length: 18 Content-Type: text/html; charset=utf-8 X-Trans-Id: txb d9fa6c73835f21650 Date: Mon, 07 Nov :44:20 GMT 201 Created Append the container name to the URL and force the PUT verb. That creates a container, which we can now see when we do a listing: Example 3.5. curl List Storage Container After a Creation 33
40 curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 1 Accept-Ranges: bytes Content-Length: 7 Content-Type: text/plain; charset=utf-8 X-Trans-Id: txaedd6b c9f5febbddb73b Date: Mon, 07 Nov :44:23 GMT george You may have noticed the account metadata that comes back from the listing call. As you'd guess, it'll tell you how many objects you have, how much space you are using, and how many containers you are using Paging Lists of Containers If you have a large number of containers, it is sometimes more convenient to page through them than getting some big long list of them. If I create more containers and then do a regular listing, here's what it looks like with five containers: Example 3.6. curl List Storage Container (long list) curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 5 Accept-Ranges: bytes Content-Length: 31 Content-Type: text/plain; charset=utf-8 X-Trans-Id: txb28795cc25b04f0dbce408dfa5a3cfc9 Date: Mon, 07 Nov :03:06 GMT cosmo dogs elaine george jerry 34
41 Suppose I want a page size of 2, all I do is append a ""?limit=2"" to my URL: Example 3.7. curl List Storage Container with Paging (first page) curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 5 Accept-Ranges: bytes Content-Length: 11 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx940ee02c1a65451e96a2a2532e3a7ce7 Date: Mon, 07 Nov :05:30 GMT cosmo dogs Not surprisingly, I only get two containers. To get the next page, you tell the system which item you last saw with the "marker=" specifier: Example 3.8. curl List Storage Container with Paging (later pages) curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 5 Accept-Ranges: bytes Content-Length: 14 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx2a69f7ec38c34078a185c5875a4c0e34 Date: Mon, 07 Nov :15:00 GMT elaine george Notice that I had to use \& so that my bash shell didn't try to interpret the & as wanting to run something in its own thread. With that in place, you get the next page of items that appear after the marker. 35
42 3.6. Serialized Output In other situations, like if you are working on a language binding on top of the REST API, you might want more structured data back from the method calls. By appending a "format=" and then choosing either json or xml, you can get that structured data back you've been dreaming about. Example 3.9. curl List Storage Container (JSON output) curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 5 Accept-Ranges: bytes Content-Length: 187 Content-Type: application/json; charset=utf-8 X-Trans-Id: txd408573a51d2423c848cba191fbede9b Date: Mon, 07 Nov :17:33 GMT [{"name":"cosmo", "count":0,"bytes":0}, {"name":"dogs","count":0,"bytes":0}, {"name":"elaine","count":0,"bytes":0}, {"name":"george","count":0,"bytes":0}, {"name":"jerry","count":0,"bytes":0}] Example curl List Storage Container (XML output) curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 5 Accept-Ranges: bytes Content-Length: 479 Content-Type: application/xml; charset=utf-8 X-Trans-Id: tx5e5685a15d0b406799b6a425b1150e4c Date: Mon, 07 Nov :17:38 GMT <?xml version="1.0" encoding="utf-8"?> <account name="auth_a23f73d2-abfb-4656-af94-32ddec35dab8"> <container><name>cosmo</name><count>0</count><bytes>0</bytes></container> <container><name>dogs</name><count>0</count><bytes>0</bytes></container> 36
43 <container><name>elaine</name><count>0</count><bytes>0</bytes></container> <container><name>george</name><count>0</count><bytes>0</bytes></container> <container><name>jerry</name><count>0</count><bytes>0</bytes></container> </account> The remainder of the examples in this document will use the standard, non-serialized output but all operations accept the format argument. You might notice that when you use one of the formats, you get more information about the containers. That's the percontainer metadata, which is covered in the next section Container Metadata and Deleting Containers You can get at container metadata directly simply by appending the name of the container to a HEAD request: Example curl List Container Metadata curl X HEAD -i \ HTTP/ No Content X-Container-Object-Count: 0 X-Container-Bytes-Used: 0 Accept-Ranges: bytes X-Trans-Id: tx3dd984f dd97546e9d49d65e90 Content-Length: 0 Date: Mon, 07 Nov :39:41 GMT Not very exciting without any objects in the container, but you get the idea. While you cannot update or delete container metadata, you can delete a container: Example curl Delete Storage Container curl X DELETE -i \ HTTP/ No Content Content-Length: 0 Content-Type: text/html; charset=utf-8 X-Trans-Id: tx3fa3857f266f44319d9b8f4bf7ce7fc8 Date: Mon, 07 Nov :42:58 GMT Then let's confirm the delete by listing the containers again: 37
44 Example curl List Containers After a Delete curl X GET -i \ HTTP/ OK X-Account-Object-Count: 0 X-Account-Bytes-Used: 0 X-Account-Container-Count: 4 Accept-Ranges: bytes Content-Length: 24 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx b849ce9403e382fe3f8015 Date: Mon, 07 Nov :43:08 GMT cosmo dogs elaine jerry 3.8. Special Metadata: Container ACLs A particularly important metadata element for containers is X-Container-Read, which establishes the ACL permissions on who can read objects in the container. Prior to being set, the ACL logic default to only be accessible to someone with a valid X-Auth-Token for the account in question. Doing a simple listing of a container shows us the absence of X- Container-Read in this default situation: Example curl List Container Showing Lack of ACL curl X GET -i \ HTTP/ No Content X-Container-Object-Count: 0 X-Container-Bytes-Used: 0 Accept-Ranges: bytes X-Trans-Id: tx3aa52e951fc64b63bc1fda27902b9bd3 Content-Length: 0 Date: Tue, 15 Nov :29:22 GMT Now we'll set the X-Container-Read. For a full explanation of valid values, see: swift.openstack.org/misc.html#acls but for our simple needs, we'll enable read access and listing access to anybody: 38
45 Example curl Setting an ACL on a Container curl X PUT -i \ -H "X-Container-Read:.r:*,.rlistings" \ HTTP/ Accepted Content-Length: 58 Content-Type: text/html; charset=utf-8 X-Trans-Id: txf2befb56b1854a50995f710f2db48089 Date: Tue, 15 Nov :33:16 GMT 202 Accepted The request is accepted for processing. To see the metadata change, do a listing again: Example curl List Container Showing with an ACL curl X GET -i \ HTTP/ No Content X-Container-Object-Count: 0 X-Container-Read:.r:*,.rlistings X-Container-Bytes-Used: 0 Accept-Ranges: bytes X-Trans-Id: txb40eb86d949345f7bc66b01e8b63c3a5 Content-Length: 0 Date: Tue, 15 Nov :33:36 GMT The side effect of giving anybody read access is that any object in the container is now accessible from a browser simply by entering the X-Storage-URL used throughout the session and append the object name. For example: would be the URL of an object named "cereal.jpg" in the container "jerry" that has been made publicly accessible using this method Creating Objects Enough with containers already, let's start to upload some objects. Suppose you had a local directory full of dog pictures: 39
46 Example Sample File Listing $ ls -l total 504 -rw-r--r--@ 1 petecj2 staff Nov 7 14:49 JingleRocky.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 RockyAndBuster.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 SittingBuster.jpg In order to put one of them in a container called "dogs" with curl, you'd do this: Example Creating and Uploading an Object to a Container curl X PUT -i \ -T JingleRocky.jpg" \ HTTP/ Created Content-Length: 118 Content-Type: text/html; charset=utf-8 Etag: f7d40eceffdd9c2ecab b2a6 Last-Modified: Mon, 07 Nov :51:29 GMT X-Trans-Id: txd131cc897c78403daf5fad010d4d7152 Date: Mon, 07 Nov :51:30 GMT <html> <head> <title>201 Created</title> </head> <body> <h1>201 Created</h1> <br /><br /> </body> </html> The object gets named from whatever we append to the URL path beyond the container name and the -T switch lets us name a file to push with the operation as the request body. We can confirm the upload by checking the container again: Example curl List Container Showing Newly Uploaded Object curl X GET -i \ 40
47 HTTP/ OK X-Container-Object-Count: 1 X-Container-Read:.r:*,.rlistings X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 16 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx83be89d4e1a34eacbfeebcdfc7a7f2e7 Date: Mon, 07 Nov :56:25 GMT JingleRocky.jpg Notice that the container metadata now reflects the number of objects and the bytes match what we saw when we did the directory listing. After uploading the other two similarly, we get a full object listing: Example curl List Container Showing Multiple Newly Uploaded Objects curl X GET -i \ HTTP/ OK X-Container-Object-Count: 3 X-Container-Read:.r:*,.rlistings X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 53 Content-Type: text/plain; charset=utf-8 X-Trans-Id: txae17dfa78da64117aaf07585a1b02115 Date: Mon, 07 Nov :00:56 GMT JingleRocky.jpg RockyAndBuster.jpg SittingBuster.jpg Paging Lists of Objects Exactly like listing containers, objects can be listed in pages at a time using markers to denote pages. From the previous example with 3 objects in the container "dogs", the list can be paged with the "limit" query string variable: Example curl List Objects (first page) curl X GET -i \ 41
48 HTTP/ OK X-Container-Object-Count: 3 X-Container-Read:.r:*,.rlistings X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 35 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx5e00fa9fa bc814cb0c6162d Date: Tue, 15 Nov :53:51 GMT JingleRocky.jpg RockyAndBuster.jpg And the second page fetched with: Example curl List Objects with Paging (later pages) curl X GET -i \ jpg\&limit=2 HTTP/ OK X-Container-Object-Count: 3 X-Container-Read:.r:*,.rlistings X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 18 Content-Type: text/plain; charset=utf-8 X-Trans-Id: txe1287a7179dc4dfd a0fff157 Date: Tue, 15 Nov :54:21 GMT SittingBuster.jpg Retrieve, Copy, and Delete Objects Now we'll retrieve an object previously uploaded. First, we'll remove the local copy: Example Removing Local Copies $ ls -l total 504 -rw-r--r--@ 1 petecj2 staff Nov 7 14:49 JingleRocky.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 RockyAndBuster.jpg 42
49 1 petecj2 staff Nov 7 14:47 SittingBuster.jpg $ rm JingleRocky.jpg $ ls -l total 416 -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 RockyAndBuster.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 SittingBuster.jpg Be sure not to use -i switch here since what we want is the raw data, which we'll then pipe to a file: Example curl Retrieve an Object curl X GET \ > JingleRocky.jpg $ ls -l total 504 -rw-r--r-- 1 petecj2 staff Nov 7 15:11 JingleRocky.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 RockyAndBuster.jpg -rw-r--r--@ 1 petecj2 staff Nov 7 14:47 SittingBuster.jpg Next, Object Storage provides a facility to copy objects from one container to another entirely on the server side. To do this, you do a PUT with the destination container and new object name while passing a special X-Copy-From header and a Content-Length of zero: Example curl Server-side Copy an Object curl X PUT -i \ -H "X-Copy-From: /dogs/jinglerocky.jpg" \ -H "Content-Length: 0" \ HTTP/ Created Content-Length: 118 Content-Type: text/html; charset=utf-8 Etag: f7d40eceffdd9c2ecab b2a6 X-Copied-From: dogs/jinglerocky.jpg Last-Modified: Mon, 07 Nov :23:53 GMT X-Trans-Id: tx244cd14df1b94d8c91ec5dcf8c5f9da4 Date: Mon, 07 Nov :23:54 GMT <html> <head> <title>201 Created</title> 43
50 </head> <body> <h1>201 Created</h1> <br /><br /> </body> </html> You can then confirm the new location of the object. To do this, you do a GET with the destination container to see the listing of the object: Example curl Confirming the Server-side Copy an Object curl X GET -i \ HTTP/ OK X-Container-Object-Count: 1 X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 16 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx46986b4a09b fd43842b2b0dd Date: Mon, 07 Nov :24:05 GMT JingleRocky.jpg To delete an object from its container, simply use the DELETE verb: Example curl Delete an Object curl X DELETE -i \ HTTP/ No Content Content-Length: 0 Content-Type: text/html; charset=utf-8 X-Trans-Id: txd45f04422b034e6f8447de400b78cbf3 Date: Mon, 07 Nov :32:39 GMT Confirming the deletion by doing a container listing: 44
51 Example curl Confirming the Delete an Object curl X GET -i \ HTTP/ No Content X-Container-Object-Count: 0 X-Container-Bytes-Used: 0 Accept-Ranges: bytes X-Trans-Id: txc9b43bf4d896405eb9a88ca468bf7b2d Content-Length: 0 Date: Mon, 07 Nov :32:41 GMT Object Metadata Objects can have whatever metadata keys/values you choose. Simply POST an HTTP Header to the object in the form of X-Object-Meta-<key>: <value>. Like this: Example curl Set Object Metadata curl X POST -i \ -H "X-Object-Meta-Breed: Terrier pit bull mix"" \ <html> <head> <title>202 Accepted</title> </head> <body> <h1>202 Accepted</h1> The request is accepted for processing.<br /><br /> </body> </html> And then read the object metadata with a HEAD on the object path: Example curl Reading Object Metadata curl X HEAD -i \ 45
52 HTTP/ OK X-Object-Meta-Breed: Terrier pit bull mix Last-Modified: Tue, 08 Nov :26:49 GMT Etag: f7d40eceffdd9c2ecab b2a6 Accept-Ranges: bytes Content-Length: Content-Type: image/jpeg X-Trans-Id: txa8bff9ad7ef c1f9b8c20781 Date: Tue, 08 Nov :29:35 GMT Pseudo-Hierarchical Folders/Directories For the last section, we come to the most confusing concept in Object Storage. In most storage systems, you have the ability to create custom hierarchies of files so that you can better organize them. On its surface, Object Storage only gives you one level of hierarchy in the form of containers. However, it turns out that you can get creative with naming your objects to give yourself the same effect as having hierarchical containers. Let's start with a fresh container without any objects in it: Example curl Create New Container for Folders curl X PUT -i \ HTTP/ Created Content-Length: 18 Content-Type: text/html; charset=utf-8 X-Trans-Id: txc78254a41b374b6ea10590d90874f769 Date: Wed, 16 Nov :06:22 GMT 201 Created Now list the new container: Example curl Listing the New Container curl X GET -i \ 46
53 HTTP/ No Content X-Container-Object-Count: 0 X-Container-Bytes-Used: 0 Accept-Ranges: bytes X-Trans-Id: tx f7934c2bab1de3ae103c368e Content-Length: 0 Date: Wed, 16 Nov :06:26 GMT Next, add an object but prefix the name with the hierarchy desired: Example curl Upload an Object with a Prefix curl X PUT -i \ -T JingleRocky.jpg \ jpg HTTP/ Created Content-Length: 118 Content-Type: text/html; charset=utf-8 Etag: f7d40eceffdd9c2ecab b2a6 Last-Modified: Wed, 16 Nov :09:18 GMT X-Trans-Id: txe34fdf2704f044e3a b1cb7 Date: Wed, 16 Nov :09:19 GMT <html> <head> <title>201 Created</title> </head> <body> <h1>201 Created</h1> <br /><br /> </body> </html> Do it again with a different object and prefix: Example curl Upload a Different Object with a Different Prefix curl X PUT -i \ -T SittingBuster.jpg \ SittingBuster.jpg 47
54 HTTP/ Created Content-Length: 118 Content-Type: text/html; charset=utf-8 Etag: e692e744c7180ee368166a24f1a2fa9b Last-Modified: Wed, 16 Nov :52:25 GMT X-Trans-Id: txe229d03af5ea4d2ea1071def213c3f02 Date: Wed, 16 Nov :52:25 GMT <html> <head> <title>201 Created</title> </head> <body> <h1>201 Created</h1> <br /><br /> </body> </html> Now list the container, revealing the prefixes: Example curl Listing a Container with Object Prefix curl X GET -i \ HTTP/ OK X-Container-Object-Count: 2 X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 54 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx8544a17e8b1e4da693145fb5f2e6db43 Date: Wed, 16 Nov :53:43 GMT chihuahuas/sittingbuster.jpg terriers/jinglerocky.jpg If you want to perform hierarchical listings, with the prefixes in place, you can use the "path" query string variable: Example curl Listing a Container with a Path curl X GET -i \ 48
55 HTTP/ OK X-Container-Object-Count: 2 X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 25 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx3f1b9575d4de4a7d97ba3f9ad81923cc Date: Wed, 16 Nov :55:12 GMT terriers/jinglerocky.jpg If you wanted to see what prefixes were in place, you can use the "delimiter" query string variable to distinguish prefix paths from object names: Example curl Listing a Container with a Delimiter curl X GET -i \ HTTP/ OK X-Container-Object-Count: 2 X-Container-Bytes-Used: Accept-Ranges: bytes Content-Length: 22 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx7222a3dd73fe44b888db4e58cc647d1e Date: Wed, 16 Nov :57:40 GMT chihuahuas/ terriers/ Using these in combination allows you to discover directories within a particular path and then further drill down based on the results. 49
56 4. Document Change History This version of the guide was forked from the Rackspace Cloud Files. Revision Date Feb 2, 2013 Sep 12, 2012 Sep 5, 2012 Mar 29, 2012 Feb -10, 2011 Jan 25, 2011 Summary of Changes Moved code samples into separate files for content sharing. Fixed bug Adds back metadata deletion information. Fixed bugs Added Object Versioning and Static Web. Fixed bugs and Add/Update Container Metadata and Expiring Objects. Changed to Maven Revised to change first to last in the first range example for fetching a portion of an object. Revised for OpenStack Object Storage use by removing CDN references, Rackspace Cloud references, and revised account examples and URLs for generic implementations. It's not a changed requirement that Container and Object names are required to be UTF-8, but it's pointed out in the documentation. Jan 12, 2011 Removed references to ACL (Access Control List). Fixed error in examples referring to X- Auth-Key where it should be X-Auth-Token. Added section numbers. Jan 4, 2011 May 5, 2008 Expanded authentication information for UK release. Added "delimiter" as a Query Parameter and server-side object copy example. Initial Release. 50
57 5. Additional Resources You can download the most current version of this document from the OpenStack Docs website at For more information about the Rackspace implementation of the OpenStack Object Storage service, see: Related documents are available at the same site, as are links to Rackspace's official support channels, including knowledge base articles, forums, phone, chat, and . 51
Release: August 2011. Gluster Filesystem Unified File and Object Storage Beta 2
Release: August 2011 Gluster Filesystem Unified File and Object Storage Beta 2 Copyright Copyright 2011 Gluster, Inc. This is a preliminary document and may be changed substantially prior to final commercial
HOST EUROPE CLOUD STORAGE REST API DEVELOPER REFERENCE
HOST EUROPE CLOUD STORAGE REST API DEVELOPER REFERENCE REST API REFERENCE REST OVERVIEW Host Europe REST Storage Service uses HTTP protocol as defned by RFC 2616. REST operations consist in sending HTTP
WP4: Cloud Hosting Chapter Object Storage Generic Enabler
WP4: Cloud Hosting Chapter Object Storage Generic Enabler Webinar John Kennedy, Thijs Metsch@ Intel Outline 1 Overview of the Cloud Hosting Work Package 2 Functionality Trust and Security Operations FI-WARE
Cloud Servers Developer Guide
Cloud Servers Developer Guide API v0.9 This document is intended for software developers interested in developing applications using the Cloud Servers Application Programming Interface (API). Table of
reference: HTTP: The Definitive Guide by David Gourley and Brian Totty (O Reilly, 2002)
1 cse879-03 2010-03-29 17:23 Kyung-Goo Doh Chapter 3. Web Application Technologies reference: HTTP: The Definitive Guide by David Gourley and Brian Totty (O Reilly, 2002) 1. The HTTP Protocol. HTTP = HyperText
CloudOYE CDN USER MANUAL
CloudOYE CDN USER MANUAL Password - Based Access Logon to http://mycloud.cloudoye.com. Enter your Username & Password In case, you have forgotten your password, click Forgot your password to request a
Implementing Cloud Storage with OpenStack Swift
Implementing Cloud Storage with OpenStack Swift Amar Kapadia Sreedhar Varma Kris Rajana Chapter No. 4 "Using Swift" In this package, you will find: A Biography of the authors of the book A preview chapter
HTTP REST API for OpenStack Object Storage Metadata Search (OSMS)
HTTP REST API for OpenStack Object Storage Metadata Search (OSMS) Revision History Version Date Author Changes 0.1 19-Mar-2013 Lincoln Thomas Initial draft 0.2 23-Jul-2013 Lincoln Thomas Cumulative changes
Contents. 2 Alfresco API Version 1.0
The Alfresco API Contents The Alfresco API... 3 How does an application do work on behalf of a user?... 4 Registering your application... 4 Authorization... 4 Refreshing an access token...7 Alfresco CMIS
Designing RESTful Web Applications
Ben Ramsey php works About Me: Ben Ramsey Proud father of 7-month-old Sean Organizer of Atlanta PHP user group Founder of PHP Groups Founding principal of PHP Security Consortium Original member of PHPCommunity.org
Nuance Mobile Developer Program. HTTP Services for Nuance Mobile Developer Program Clients
Nuance Mobile Developer Program HTTP Services for Nuance Mobile Developer Program Clients Notice Nuance Mobile Developer Program HTTP Services for Nuance Mobile Developer Program Clients Copyright 2011
HTTP. Internet Engineering. Fall 2015. Bahador Bakhshi CE & IT Department, Amirkabir University of Technology
HTTP Internet Engineering Fall 2015 Bahador Bakhshi CE & IT Department, Amirkabir University of Technology Questions Q1) How do web server and client browser talk to each other? Q1.1) What is the common
Remote Access API 2.0
VYATTA A BROCADE COMPANY Vyatta System Remote Access API 2.0 REFERENCE GUIDE Vyatta A Brocade Company 130 Holger Way San Jose, CA 95134 www.brocade.com 408 333 8400 COPYRIGHT Copyright 2005 2015 Vyatta,
HireDesk API V1.0 Developer s Guide
HireDesk API V1.0 Developer s Guide Revision 1.4 Talent Technology Corporation Page 1 Audience This document is intended for anyone who wants to understand, and use the Hiredesk API. If you just want to
CS640: Introduction to Computer Networks. Applications FTP: The File Transfer Protocol
CS640: Introduction to Computer Networks Aditya Akella Lecture 4 - Application Protocols, Performance Applications FTP: The File Transfer Protocol user at host FTP FTP user client interface local file
Internet Technologies Internet Protocols and Services
QAFQAZ UNIVERSITY Computer Engineering Department Internet Technologies Internet Protocols and Services Dr. Abzetdin ADAMOV Chair of Computer Engineering Department [email protected] http://ce.qu.edu.az/~aadamov
Project #2. CSE 123b Communications Software. HTTP Messages. HTTP Basics. HTTP Request. HTTP Request. Spring 2002. Four parts
CSE 123b Communications Software Spring 2002 Lecture 11: HTTP Stefan Savage Project #2 On the Web page in the next 2 hours Due in two weeks Project reliable transport protocol on top of routing protocol
Force.com REST API Developer's Guide
Force.com REST API Developer's Guide Version 35.0, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark
Qualys API Limits. July 10, 2014. Overview. API Control Settings. Implementation
Qualys API Limits July 10, 2014 Overview The Qualys API enforces limits on the API calls a customer can make based on their subscription settings, starting with Qualys version 6.5. The limits apply to
1. When will an IP process drop a datagram? 2. When will an IP process fragment a datagram? 3. When will a TCP process drop a segment?
Questions 1. When will an IP process drop a datagram? 2. When will an IP process fragment a datagram? 3. When will a TCP process drop a segment? 4. When will a TCP process resend a segment? CP476 Internet
Cloud Elements! Marketing Hub Provisioning and Usage Guide!
Cloud Elements Marketing Hub Provisioning and Usage Guide API Version 2.0 Page 1 Introduction The Cloud Elements Marketing Hub is the first API that unifies marketing automation across the industry s leading
Outline Definition of Webserver HTTP Static is no fun Software SSL. Webserver. in a nutshell. Sebastian Hollizeck. June, the 4 th 2013
Definition of in a nutshell June, the 4 th 2013 Definition of Definition of Just another definition So what is it now? Example CGI php comparison log-file Definition of a formal definition Aisaprogramthat,usingthe
Implementation of OpenStack and CDMI data storage protocols based on existing web server and file system API.
Implementation of OpenStack and CDMI data storage protocols based on existing web server and file system API. Faisal Ibne Mozher Askar Abdurazakov This thesis is performed as part of the degree project
docs.rackspace.com/api
docs.rackspace.com/api Rackspace Cloud Backup Developer API v1.0 (2015-06-30) 2015 Rackspace US, Inc. This document is intended for software developers interested in developing applications using the Rackspace
Title page. Alcatel-Lucent 5620 SERVICE AWARE MANAGER 13.0 R7
Title page Alcatel-Lucent 5620 SERVICE AWARE MANAGER 13.0 R7 APPLICATION API DEVELOPER GUIDE 3HE-10590-AAAA-TQZZA Issue 1 December 2015 Legal notice Legal notice Alcatel, Lucent, Alcatel-Lucent and the
Protocolo HTTP. Web and HTTP. HTTP overview. HTTP overview
Web and HTTP Protocolo HTTP Web page consists of objects Object can be HTML file, JPEG image, Java applet, audio file, Web page consists of base HTML-file which includes several referenced objects Each
Table of Contents. Open-Xchange Authentication & Session Handling. 1.Introduction...3
Open-Xchange Authentication & Session Handling Table of Contents 1.Introduction...3 2.System overview/implementation...4 2.1.Overview... 4 2.1.1.Access to IMAP back end services...4 2.1.2.Basic Implementation
Perceptive Integration Server
Perceptive Integration Server Getting Started Guide ImageNow Version: 6.7. x Written by: Product Documentation, R&D Date: October 2013 2013 Perceptive Software. All rights reserved CaptureNow, ImageNow,
HTTP Protocol. Bartosz Walter <[email protected]>
HTTP Protocol Bartosz Walter Agenda Basics Methods Headers Response Codes Cookies Authentication Advanced Features of HTTP 1.1 Internationalization HTTP Basics defined in
JASPERREPORTS SERVER WEB SERVICES GUIDE
JASPERREPORTS SERVER WEB SERVICES GUIDE RELEASE 5.0 http://www.jaspersoft.com JasperReports Server Web Services Guide Copyright 2012 Jaspersoft Corporation. All rights reserved. Printed in the U.S.A. Jaspersoft,
Developer Guide: REST API Applications. SAP Mobile Platform 2.3 SP03
Developer Guide: REST API Applications SAP Mobile Platform 2.3 SP03 DOCUMENT ID: DC01926-01-0233-01 LAST REVISED: September 2013 Copyright 2013 by Sybase, Inc. All rights reserved. This publication pertains
Internet Technologies. World Wide Web (WWW) Proxy Server Network Address Translator (NAT)
Internet Technologies World Wide Web (WWW) Proxy Server Network Address Translator (NAT) What is WWW? System of interlinked Hypertext documents Text, Images, Videos, and other multimedia documents navigate
Web. Services. Web Technologies. Today. Web. Technologies. Internet WWW. Protocols TCP/IP HTTP. Apache. Next Time. Lecture #3 2008 3 Apache.
JSP, and JSP, and JSP, and 1 2 Lecture #3 2008 3 JSP, and JSP, and Markup & presentation (HTML, XHTML, CSS etc) Data storage & access (JDBC, XML etc) Network & application protocols (, etc) Programming
Network Technologies
Network Technologies Glenn Strong Department of Computer Science School of Computer Science and Statistics Trinity College, Dublin January 28, 2014 What Happens When Browser Contacts Server I Top view:
UpCloud API Documentation. API version 1.1.1 Updated Aug 13, 2013
UpCloud API Documentation API version 1.1.1 Updated Aug 13, 2013 INTRODUCTION 4 Version history... 4 ARCHITECTURE OVERVIEW 5 API overview... 5 API versioning... 5 Authentication... 5 Resource identifiers...
Design Notes for an Efficient Password-Authenticated Key Exchange Implementation Using Human-Memorable Passwords
Design Notes for an Efficient Password-Authenticated Key Exchange Implementation Using Human-Memorable Passwords Author: Paul Seymer CMSC498a Contents 1 Background... 2 1.1 HTTP 1.0/1.1... 2 1.2 Password
GDC Data Transfer Tool User s Guide. NCI Genomic Data Commons (GDC)
GDC Data Transfer Tool User s Guide NCI Genomic Data Commons (GDC) Contents 1 Getting Started 3 Getting Started.......................................................... 3 The GDC Data Transfer Tool: An
Fairsail REST API: Guide for Developers
Fairsail REST API: Guide for Developers Version 1.02 FS-API-REST-PG-201509--R001.02 Fairsail 2015. All rights reserved. This document contains information proprietary to Fairsail and may not be reproduced,
By Bardia, Patit, and Rozheh
HTTP By Bardia, Patit, and Rozheh HTTP - Introduction - Hyper Text Transfer Protocol -uses the TCP/IP technology -has had the most impact on the World Wide Web (WWW) - specs in RFC 2616 (RFC2616) HTTP
APACHE WEB SERVER. Andri Mirzal, PhD N28-439-03
APACHE WEB SERVER Andri Mirzal, PhD N28-439-03 Introduction The Apache is an open source web server software program notable for playing a key role in the initial growth of the World Wide Web Typically
Managing Users and Identity Stores
CHAPTER 8 Overview ACS manages your network devices and other ACS clients by using the ACS network resource repositories and identity stores. When a host connects to the network through ACS requesting
www.basho.com Technical Overview Simple, Scalable, Object Storage Software
www.basho.com Technical Overview Simple, Scalable, Object Storage Software Table of Contents Table of Contents... 1 Introduction & Overview... 1 Architecture... 2 How it Works... 2 APIs and Interfaces...
vcloud Air Platform Programmer's Guide
vcloud Air Platform Programmer's Guide vcloud Air OnDemand 5.7 This document supports the version of each product listed and supports all subsequent versions until the document is replaced by a new edition.
Computer Networks. Lecture 7: Application layer: FTP and HTTP. Marcin Bieńkowski. Institute of Computer Science University of Wrocław
Computer Networks Lecture 7: Application layer: FTP and Marcin Bieńkowski Institute of Computer Science University of Wrocław Computer networks (II UWr) Lecture 7 1 / 23 Reminder: Internet reference model
What is Distributed Annotation System?
Contents ISiLS Lecture 12 short introduction to data integration F.J. Verbeek Genome browsers Solutions for integration CORBA SOAP DAS Ontology mapping 2 nd lecture BioASP roadshow 1 2 Human Genome Browsers
No. Time Source Destination Protocol Info 1190 131.859385 128.238.245.34 128.119.245.12 HTTP GET /ethereal-labs/http-ethereal-file1.html HTTP/1.
Ethereal Lab: HTTP 1. The Basic HTTP GET/response interaction 1190 131.859385 128.238.245.34 128.119.245.12 HTTP GET /ethereal-labs/http-ethereal-file1.html HTTP/1.1 GET /ethereal-labs/http-ethereal-file1.html
Novell Identity Manager
AUTHORIZED DOCUMENTATION Manual Task Service Driver Implementation Guide Novell Identity Manager 4.0.1 April 15, 2011 www.novell.com Legal Notices Novell, Inc. makes no representations or warranties with
CTIS 256 Web Technologies II. Week # 1 Serkan GENÇ
CTIS 256 Web Technologies II Week # 1 Serkan GENÇ Introduction Aim: to be able to develop web-based applications using PHP (programming language) and mysql(dbms). Internet is a huge network structure connecting
Copyright 2013 Consona Corporation. All rights reserved www.compiere.com
COMPIERE 3.8.1 SOAP FRAMEWORK Copyright 2013 Consona Corporation. All rights reserved www.compiere.com Table of Contents Compiere SOAP API... 3 Accessing Compiere SOAP... 3 Generate Java Compiere SOAP
Installation & Configuration Guide User Provisioning Service 2.0
Installation & Configuration Guide User Provisioning Service 2.0 NAVEX Global User Provisioning Service 2.0 Installation Guide Copyright 2015 NAVEX Global, Inc. NAVEX Global is a trademark/service mark
DEPLOYMENT GUIDE Version 2.1. Deploying F5 with Microsoft SharePoint 2010
DEPLOYMENT GUIDE Version 2.1 Deploying F5 with Microsoft SharePoint 2010 Table of Contents Table of Contents Introducing the F5 Deployment Guide for Microsoft SharePoint 2010 Prerequisites and configuration
DARIAH Storage API A Basic Storage Service API on Bit Preservation Level
DARIAH Storage API A Basic Storage Service API on Bit Preservation Level DARIAH-DE Aufbau von Forschungsinfrastrukturen für die e-humanities Authors: Stefan E. Funk, Peter Gietz, Martin Haase (DAASI International)
Issuetrak API 1.2 Documentation A Guide to the Issuetrak API, Version 1.2
Issuetrak API 1.2 A Guide to the Issuetrak API, Version 1.2 For technical assistance, please contact Issuetrak s Support Team either via e-mail at [email protected] or via the Issuetrak Support Site
Java 7 Recipes. Freddy Guime. vk» (,\['«** g!p#« Carl Dea. Josh Juneau. John O'Conner
1 vk» Java 7 Recipes (,\['«** - < g!p#«josh Juneau Carl Dea Freddy Guime John O'Conner Contents J Contents at a Glance About the Authors About the Technical Reviewers Acknowledgments Introduction iv xvi
Hypertext for Hyper Techs
Hypertext for Hyper Techs An Introduction to HTTP for SecPros Bio Josh Little, GSEC ~14 years in IT. Support, Server/Storage Admin, Webmaster, Web App Dev, Networking, VoIP, Projects, Security. Currently
docs.rackspace.com/api
docs.rackspace.com/api Rackspace Cloud Big Data Developer API v1.0 (2015-04-23) 2015 Rackspace US, Inc. This guide is intended for software developers interested in developing applications using the Rackspace
The Application Layer. CS158a Chris Pollett May 9, 2007.
The Application Layer CS158a Chris Pollett May 9, 2007. Outline DNS E-mail More on HTTP The Domain Name System (DNS) To refer to a process on the internet we need to give an IP address and a port. These
Cache Configuration Reference
Sitecore CMS 6.2 Cache Configuration Reference Rev: 2009-11-20 Sitecore CMS 6.2 Cache Configuration Reference Tips and Techniques for Administrators and Developers Table of Contents Chapter 1 Introduction...
THE PROXY SERVER 1 1 PURPOSE 3 2 USAGE EXAMPLES 4 3 STARTING THE PROXY SERVER 5 4 READING THE LOG 6
The Proxy Server THE PROXY SERVER 1 1 PURPOSE 3 2 USAGE EXAMPLES 4 3 STARTING THE PROXY SERVER 5 4 READING THE LOG 6 2 1 Purpose The proxy server acts as an intermediate server that relays requests between
docs.rackspace.com/api
docs.rackspace.com/api Rackspace Cloud Backup Getting API v1.0 (2015-03-18) 2015 Rackspace US, Inc. This document is intended for software developers interested in developing applications using the Rackspace
Handle Tool. User Manual
User Manual Corporation for National Research Initiatives Version 2 November 2015 Table of Contents 1. Start the Handle Tool... 3 2. Default Window... 3 3. Console... 5 4. Authentication... 6 5. Lookup...
API Reference Guide. API Version 1. Copyright Platfora 2016
API Reference Guide API Version 1 Copyright Platfora 2016 Last Updated: 10:05 a.m. April 21, 2016 Contents Document Conventions... 5 Contact Platfora Support...6 Copyright Notices... 6 Chapter 1: Using
CLC Server Command Line Tools USER MANUAL
CLC Server Command Line Tools USER MANUAL Manual for CLC Server Command Line Tools 2.5 Windows, Mac OS X and Linux September 4, 2015 This software is for research purposes only. QIAGEN Aarhus A/S Silkeborgvej
Description of Microsoft Internet Information Services (IIS) 5.0 and
Page 1 of 10 Article ID: 318380 - Last Review: July 7, 2008 - Revision: 8.1 Description of Microsoft Internet Information Services (IIS) 5.0 and 6.0 status codes This article was previously published under
API documentation - 1 -
API documentation - 1 - Table of Contents 1. Introduction 1.1. What is an API 2. API Functions 2.1. Purge list of files 2.1.1 Description 2.1.2 Implementation 2.2. Purge of whole cache (all files on all
Integrating VoltDB with Hadoop
The NewSQL database you ll never outgrow Integrating with Hadoop Hadoop is an open source framework for managing and manipulating massive volumes of data. is an database for handling high velocity data.
UForge 3.4 Release Notes
UForge 3.4 Release Notes This document is for users using and administrating UShareSoft UForge TM Platform v3.4. This document includes the release notes for: UForge TM Factory UForge TM Builder UI UForge
Chapter 27 Hypertext Transfer Protocol
Chapter 27 Hypertext Transfer Protocol Columbus, OH 43210 [email protected] http://www.cis.ohio-state.edu/~jain/ 27-1 Overview Hypertext language and protocol HTTP messages Browser architecture CGI
2 Downloading Access Manager 3.1 SP4 IR1
Novell Access Manager 3.1 SP4 IR1 Readme May 2012 Novell This Readme describes the Novell Access Manager 3.1 SP4 IR1 release. Section 1, Documentation, on page 1 Section 2, Downloading Access Manager 3.1
EdgeCast Networks Inc. Flash Media Streaming Administration Guide
EdgeCast Networks Inc. Flash Media Streaming Administration Guide Disclaimer Care was taken in the creation of this guide. However, EdgeCast Networks Inc. cannot accept any responsibility for errors or
The full setup includes the server itself, the server control panel, Firebird Database Server, and three sample applications with source code.
Content Introduction... 2 Data Access Server Control Panel... 2 Running the Sample Client Applications... 4 Sample Applications Code... 7 Server Side Objects... 8 Sample Usage of Server Side Objects...
The HTTP Plug-in. Table of contents
Table of contents 1 What's it for?... 2 2 Controlling the HTTPPlugin... 2 2.1 Levels of Control... 2 2.2 Importing the HTTPPluginControl...3 2.3 Setting HTTPClient Authorization Module... 3 2.4 Setting
PHP Integration Kit. Version 2.5.1. User Guide
PHP Integration Kit Version 2.5.1 User Guide 2012 Ping Identity Corporation. All rights reserved. PingFederate PHP Integration Kit User Guide Version 2.5.1 December, 2012 Ping Identity Corporation 1001
FTP Service Reference
IceWarp Server FTP Service Reference Version 10 Printed on 12 August, 2009 i Contents FTP Service 1 V10 New Features... 2 FTP Access Mode... 2 FTP Synchronization... 2 FTP Service Node... 3 FTP Service
Modern Web Development From Angle Brackets to Web Sockets
Modern Web Development From Angle Brackets to Web Sockets Pete Snyder Outline (or, what am i going to be going on about ) 1.What is the Web? 2.Why the web matters 3.What s unique about
OutDisk 4.0 FTP FTP for Email Users using Microsoft Windows and/or Microsoft Outlook. 5/1/2012 2012 Encryptomatic LLC www.encryptomatic.
OutDisk 4.0 FTP FTP for Email Users using Microsoft Windows and/or Microsoft Outlook 5/1/2012 2012 Encryptomatic LLC www.encryptomatic.com Contents What is OutDisk?... 3 OutDisk Requirements... 3 How Does
The Hyper-Text Transfer Protocol (HTTP)
The Hyper-Text Transfer Protocol (HTTP) Antonio Carzaniga Faculty of Informatics University of Lugano October 4, 2011 2005 2007 Antonio Carzaniga 1 HTTP message formats Outline HTTP methods Status codes
OpenStack Object Storage Administrator Guide
OpenStack Object Storage (02/03/11) Copyright 2010, 2011 OpenStack LLC All rights reserved. OpenStack Object Storage offers open source software for cloud-based object storage for any organization. This
Getting Started with AWS. Hosting a Static Website
Getting Started with AWS Hosting a Static Website Getting Started with AWS: Hosting a Static Website Copyright 2016 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks
Symantec Protection Engine for Cloud Services Software Developer's Guide
Symantec Protection Engine for Cloud Services Software Developer's Guide Symantec Protection Engine for Cloud Services Software Developer's Guide The software described in this book is furnished under
CA Nimsoft Service Desk
CA Nimsoft Service Desk Configure Outbound Web Services 7.13.7 Legal Notices Copyright 2013, CA. All rights reserved. Warranty The material contained in this document is provided "as is," and is subject
World Wide Web. Before WWW
World Wide Web [email protected] Before WWW Major search tools: Gopher and Archie Archie Search FTP archives indexes Filename based queries Gopher Friendly interface Menu driven queries João Neves 2
Safeguard Ecommerce Integration / API
Safeguard Ecommerce Integration / API Product Manual Version 3 Revision 1.11 Table of Contents 1. INTRODUCTION... 4 1.1 Available commands... 4 2. HOW THE ADMINISTRATION SYSTEM IS EXPECTED TO BE USED OPERATIONALLY...
Scoreboard 2.5/2.7 Installation Guide. For Apache Tomcat 7.0 On Windows 2003/2008 Server, 64-bit
Scoreboard 2.5/2.7 Installation Guide For Apache Tomcat 7.0 On Windows 2003/2008 Server, 64-bit Updated September 3, 2013 1 Scoreboard and Connect By Spider Strategies Minimum Server Requirements The following
KMx Enterprise: Integration Overview for Member Account Synchronization and Single Signon
KMx Enterprise: Integration Overview for Member Account Synchronization and Single Signon KMx Enterprise includes two api s for integrating user accounts with an external directory of employee or other
Flight Workflow User's Guide. Release 12.0.0
Flight Workflow User's Guide Release 12.0.0 Copyright 2015 Signiant Inc. All rights reserved. Contents CHAPTER 1 Flight Introduction 4 FlightUploadReference 4 FlightDownloadReference 4 Cloud Storage Configuration
LifeSize UVC Video Center Deployment Guide
LifeSize UVC Video Center Deployment Guide November 2013 LifeSize UVC Video Center Deployment Guide 2 LifeSize UVC Video Center LifeSize UVC Video Center records and streams video sent by LifeSize video
IoT-Ticket.com. Your Ticket to the Internet of Things and beyond. IoT API
IoT-Ticket.com Your Ticket to the Internet of Things and beyond IoT API Contents 1 Introduction... 4 1.1 Overview... 4 1.2 Abbreviations and definitions... 4 1.3 Data Model... 4 1.4 General Information...
URLs and HTTP. ICW Lecture 10 Tom Chothia
URLs and HTTP ICW Lecture 10 Tom Chothia This Lecture The two basic building blocks of the web: URLs: Uniform Resource Locators HTTP: HyperText Transfer Protocol Uniform Resource Locators Many Internet
Axway API Gateway. Version 7.4.1
O A U T H U S E R G U I D E Axway API Gateway Version 7.4.1 3 February 2016 Copyright 2016 Axway All rights reserved. This documentation describes the following Axway software: Axway API Gateway 7.4.1
Cloud Elements ecommerce Hub Provisioning Guide API Version 2.0 BETA
Cloud Elements ecommerce Hub Provisioning Guide API Version 2.0 BETA Page 1 Introduction The ecommerce Hub provides a uniform API to allow applications to use various endpoints such as Shopify. The following
Message Containers and API Framework
Message Containers and API Framework Notices Copyright 2009-2010 Motion Picture Laboratories, Inc. This work is licensed under the Creative Commons Attribution-No Derivative Works 3.0 United States License.
Job Reference Guide. SLAMD Distributed Load Generation Engine. Version 1.8.2
Job Reference Guide SLAMD Distributed Load Generation Engine Version 1.8.2 June 2004 Contents 1. Introduction...3 2. The Utility Jobs...4 3. The LDAP Search Jobs...11 4. The LDAP Authentication Jobs...22
Oracle Fusion Middleware Oracle API Gateway OAuth User Guide 11g Release 2 (11.1.2.4.0)
Oracle Fusion Middleware Oracle API Gateway OAuth User Guide 11g Release 2 (11.1.2.4.0) July 2015 Oracle API Gateway OAuth User Guide, 11g Release 2 (11.1.2.4.0) Copyright 1999, 2015, Oracle and/or its
Installation and Setup: Setup Wizard Account Information
Installation and Setup: Setup Wizard Account Information Once the My Secure Backup software has been installed on the end-user machine, the first step in the installation wizard is to configure their account
