Informações e instruções das APIs dos produtos Locaweb.
1. Utilizando APIs para acessar o Object Storage da Locaweb (S3)
1.4.3. Listando os objetos do Bucket
1.4.4. Listando as ACL do Bucket
1.4.5. Alterando a ACL do Bucket
1.4.6. Adicionando um objeto a um Bucket
1.4.10. Listando informações de um objeto
Uma segunda opção de acesso ao Object Storage da Locaweb, é através da utilização de APIs.
O Object Storage Locaweb suporta API RESTful que é compatível com o modelo de acesso do S3 da Amazon.
A tabela a seguir, descreve as características funcionais suportadas pelo modelo atual do S3.
| Funcionalidade | Status | Observações |
|---|---|---|
| List Buckets | Supported | |
| Delete Bucket | Supported | |
| Create Bucket | Supported | Conjunto de ACLs diferentes |
| Bucket Lifecycle | Not Supported | |
| Policy (Buckets, Objects) | Not Supported | |
| Bucket Website | Not Supported | |
| Bucket ACLs (Get, Put) | Supported | Conjunto de ACLs diferentes |
| Bucket Location | Supported | |
| Bucket Notification | Not Supported | |
| Bucket Object Versions | Supported | |
| Get Bucket Info (HEAD) | Supported | |
| Bucket Request Payment | Supported | |
| Put Object | Supported | |
| Delete Object | Supported | |
| Get Object | Supported | |
| Object ACLs (GET, PUT) | Supported | |
| Get Object Info (HEAD) | Supported | |
| POST Object | Supported | |
| Copy Object | Supported | |
| Multipart Uploads | Not Supported |
A tabela a seguir possui os parâmetros de cabeçalho que não são suportados.
| Nome | Tipo |
|---|---|
| x-amz-security-token | Request |
| Server | Response |
| x-amz-delete-marker | Response |
| x-amz-id-2 | Response |
| x-amz-version-id | Response |
Existem dois modos para acessar um Bucket.
O primeiro método identifica o bucket como um diretório de nível superior na URL.
GET /mybucket HTTP/1.1 Host: cname.domain.com
O segundo método identifica o bucket através de um nome de host virtual. Por exemplo:
GET / HTTP/1.1 Host: mybucket.cname.domain.com
A tabela abaixo, possui os cabeçalhos de requisições:
| Cabeçalho da requisição | Descrição |
|---|---|
| CONTENT_LENGTH | Length of the request body. |
| DATE | Request time and date (in UTC). |
| HOST | The name of the host server. |
| AUTHORIZATION | Authorization token. |
As possíveis respostas, estão listadas na tabela abaixo:
| HTTP Status | Código de Resposta |
|---|---|
| 100 | Continue |
| 200 | Success |
| 201 | Created |
| 202 | Accepted |
| 204 | NoContent |
| 206 | Partial content |
| 304 | NotModified |
| 400 | InvalidArgument |
| 400 | InvalidDigest |
| 400 | BadDigest |
| 400 | InvalidBucketName |
| 400 | InvalidObjectName |
| 400 | UnresolvableGrantByEmailAddress |
| 400 | InvalidPart |
| 400 | InvalidPartOrder |
| 400 | RequestTimeout |
| 400 | EntityTooLarge |
| 403 | AccessDenied |
| 403 | UserSuspended |
| 403 | RequestTimeTooSkewed |
| 404 | NoSuchKey |
| 404 | NoSuchBucket |
| 404 | NoSuchUpload |
| 405 | MethodNotAllowed |
| 408 | RequestTimeout |
| 409 | BucketAlreadyExists |
| 409 | BucketNotEmpty |
| 411 | MissingContentLength |
| 412 | PreconditionFailed |
| 416 | InvalidRange |
| 422 | UnprocessableEntity |
| 500 | InternalError |
Autenticação e os pedidos de ACLS podem ser autenticados ou não. O Object Storage assume que as solicitações não autenticadas, são enviadas por um usuário anônimo.
HTTP/1.1
PUT /buckets/bucket/object.mpeg
Host: cname.domain.com
Date: Mon, 2 Jan 2012 00:01:01 +0000
Content-Encoding: mpeg
Content-Length: 9999999
Authorization: AWS {access-key}:{hash-of-header-and-secret}
No exemplo anterior, substitua {access-chave} com o valor para o seu acesso ID da chave seguido por dois pontos. Substitua {hash de-header-e-secret} com um hash da string de cabeçalho e o segredo correspondente ao acesso ID chave.
Para gerar o hash da string de cabeçalho e secreto, é necessário:
GET / retorna uma lista de buckets criados.
GET / HTTP/1.1
Host: cname.domain.com
Authorization: AWS {access-key}:{hash-of-header-and-secret}
Para a listagem de um Bucket, temos as possíveis respostas listadas na tabela abaixo:
| Nome | Tipo | Descrição |
|---|---|---|
| Buckets | Container | Container for list of buckets. |
| Bucket | Container | Container for bucket information. |
| Name | String | Bucket name. |
| CreationDate | Date | UTC time when the bucket was created. |
| ListAllMyBucketsResult | Container | A container for the result. |
| Owner | Container | A container for the bucket owner's ID and DisplayName. |
| ID | String | The bucket owner's ID. |
| DisplayName | String | The bucket owner's display name. |
Para criar um bucket, você deve ter um ID de usuário e uma chave de acesso. Não é permitido criar buckets com um usuário anônimo.
PUT /{bucket} HTTP/1.1
Host: cname.domain.com
x-amz-acl: public-read-write
Authorization: AWS {access-key}:{hash-of-header-and-secret}
A deleção de um Bucket, pode ser feita através do exemplo abaixo:
DELETE /{bucket} HTTP/1.1
Host: cname.domain.com
Authorization: AWS {access-key}:{hash-of-header-and-secret}
O exemplo de código abaixo, retorna uma lista de objetos dentro do bucket.
GET /{bucket}?max-keys=25 HTTP/1.1
Host: cname.domain.com
ACLs são extremamente importantes na gestão de acesso de um Bucket.
O exemplo abaixo, exibe uma lista de controle de acesso a um determinado bucket.
GET /{bucket}?acl HTTP/1.1
Host: cname.domain.com
Authorization: AWS {access-key}:{hash-of-header-and-secret}
Também é possível redefinir um acesso a um bucket já existente.
PUT /{bucket}?acl HTTP/1.1
Através da API, é possível inserir um arquivo/pasta dentro de um bucket.
PUT /{bucket}/{object} HTTP/1.1
Para copiar um objeto entre buckets, deve-se utilizar PUT, conforme o exemplo abaixo.
PUT /{dest-bucket}/{dest-object} HTTP/1.1
x-amz-copy-source: {source-bucket}/{source-object}
Remove um objeto. Requer permissão de gravação definido no balde contendo.
DELETE /{bucket}/{object} HTTP/1.1
Utilizado para obter um objeto que está dentro de um bucket
GET /{bucket}/{object} HTTP/1.1
Retorna informações sobre um objeto. Esta requisição irá retornar as mesmas informações de cabeçalho, entretanto irá incluir somente os metadados, e não a carga de dados do objeto.
HEAD /{bucket}/{object} HTTP/1.1
O acesso via API, pode ser realizado através de diversas linguagens de programação.
A seguir estão o link de exemplos de utilização, com as linguagens: Java, PHP e Ruby.
http://docs.ceph.com/docs/master/radosgw/s3/java/
http://docs.ceph.com/docs/master/radosgw/s3/php/
http://docs.ceph.com/docs/master/radosgw/s3/ruby/#ruby-aws-s3-examples-aws-s3-gem