Developer Network

Documentação

Informações e instruções das APIs dos produtos Locaweb.

Locaweb Object Storage

Utilizando APIs para acessar o Object Storage da Locaweb (S3)


Sumário

1. Utilizando APIs para acessar o Object Storage da Locaweb (S3)

1.1 Acessando via API

1.2. Autenticação

1.3. Listando o Bucket

1.4. Operações com Bucket

1.4.1. Criando um Bucket

1.4.2. Deletando um Bucket

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.7. Copiando um objeto

1.4.8. Removendo um objeto

1.4.9. Obtendo um objeto

1.4.10. Listando informações de um objeto

2. Linguagens de Programação

2.1. JAVA

2.2. PHP

2.3. Ruby


1. Utilizando APIs para acessar o Object Storage da Locaweb (S3)

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
1.1. Acessando via API

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
1.2. Autenticação

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:

  • Obter o valor da cadeia de cabeçalho.
  • Normalizar a cadeia de cabeçalho de solicitação em forma canônica.
  • Gerar um HMAC usando um algoritmo de hash SHA-1.
1.3. Listando o Bucket

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.
1.4. Operações com Bucket
1.4.1. Criando um Bucket

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}
1.4.2. Deletando um Bucket

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}
1.4.3. Listando os objetos do Bucket

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
1.4.4. Listando as ACL do Bucket

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}
1.4.5. Alterando a ACL do Bucket

Também é possível redefinir um acesso a um bucket já existente.

PUT /{bucket}?acl HTTP/1.1
1.4.6. Adicionando um objeto a um Bucket

Através da API, é possível inserir um arquivo/pasta dentro de um bucket.

PUT /{bucket}/{object} HTTP/1.1
1.4.7. Copiando um objeto

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}
1.4.8. Removendo um objeto

Remove um objeto. Requer permissão de gravação definido no balde contendo.

DELETE /{bucket}/{object} HTTP/1.1
1.4.9. Obtendo um objeto

Utilizado para obter um objeto que está dentro de um bucket

GET /{bucket}/{object} HTTP/1.1
1.4.10. Listando informações de um objeto

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
2. Linguagens de Programação

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.

2.1. JAVA

http://docs.ceph.com/docs/master/radosgw/s3/java/

2.2. PHP

http://docs.ceph.com/docs/master/radosgw/s3/php/

2.3. Ruby

http://docs.ceph.com/docs/master/radosgw/s3/ruby/#ruby-aws-s3-examples-aws-s3-gem