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