2bSolutions CDN - API

Introdução

Bem-vindo à documentação da API do CDN 2bSolutions. Esta API permite que você faça upload, liste e gerencie arquivos no nosso serviço de CDN.

Todas as requisições para a API devem incluir uma chave de autenticação no cabeçalho Authorization.

Nota: Para obter uma chave de API, entre em contato com o administrador do sistema.

Autenticação

A autenticação é feita através do cabeçalho HTTP Authorization usando o esquema Bearer.

Authorization: Bearer sua_chave_api_aqui

Todas as requisições devem incluir este cabeçalho, caso contrário, você receberá um erro 401 Unauthorized.

Endpoints

POST /upload

Faz upload de um arquivo para o CDN.

Parâmetros

Nome Tipo Descrição Obrigatório
file File O arquivo a ser enviado Sim
directory String Diretório onde o arquivo será salvo (relativo à raiz do CDN) Não

Exemplo de Requisição

Usando curl:

curl -X POST \ -H "Authorization: Bearer sua_chave_api_aqui" \ -F "file=@caminho/para/seu/arquivo.jpg" \ -F "directory=pasta/subpasta" \ https://seu-dominio.com/upload

Usando JavaScript (com FormData):

const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('directory', 'pasta/subpasta'); fetch('/upload', { method: 'POST', headers: { 'Authorization': `Bearer sua_chave_api_aqui` }, body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "success": true, "file": { "name": "nome_original_do_arquivo.jpg", "size": 12345, "type": "image/jpeg", "url": "https://seu-dominio.com/files/pasta/subpasta/arquivo_uuid.jpg", "directory": "pasta/subpasta", "path": "pasta/subpasta/arquivo_uuid.jpg" } }

Respostas de Erro

Código Descrição
400 Bad Request Arquivo não enviado ou tipo de arquivo não permitido
401 Unauthorized Chave de API inválida ou ausente
500 Internal Server Error Erro ao processar o arquivo
GET /files/list

Lista todos os arquivos no diretório raiz do CDN.

Exemplo de Requisição

curl -X GET \ -H "Authorization: Bearer sua_chave_api_aqui" \ https://seu-dominio.com/files/list

Usando JavaScript:

fetch('/files/list', { method: 'GET', headers: { 'Authorization': `Bearer sua_chave_api_aqui` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "files": [ { "name": "arquivo1.jpg", "size": 12345, "url": "https://seu-dominio.com/files/arquivo1.jpg" }, { "name": "arquivo2.pdf", "size": 67890, "url": "https://seu-dominio.com/files/arquivo2.pdf" } ] }
GET /api/files

Lista arquivos e diretórios em um diretório específico, com mais detalhes.

Parâmetros de Query

Nome Tipo Descrição Obrigatório
directory String Caminho do diretório a ser listado (relativo à raiz do CDN) Não (padrão: raiz)

Exemplo de Requisição

curl -X GET \ -H "Authorization: Bearer sua_chave_api_aqui" \ https://seu-dominio.com/api/files?directory=pasta/subpasta

Usando JavaScript:

fetch('/api/files?directory=pasta/subpasta', { method: 'GET', headers: { 'Authorization': `Bearer sua_chave_api_aqui` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "currentDirectory": "pasta/subpasta", "parentDirectory": "pasta", "items": [ { "name": "outra_pasta", "type": "directory", "path": "pasta/subpasta/outra_pasta" }, { "name": "arquivo.jpg", "type": "file", "size": 12345, "modified": "2023-05-15T10:30:00.000Z", "url": "https://seu-dominio.com/files/pasta/subpasta/arquivo.jpg", "path": "pasta/subpasta/arquivo.jpg", "extension": ".jpg" } ] }
DELETE /files/:filename

Exclui um arquivo do diretório raiz do CDN.

Parâmetros de URL

Nome Tipo Descrição Obrigatório
filename String Nome do arquivo a ser excluído Sim

Exemplo de Requisição

curl -X DELETE \ -H "Authorization: Bearer sua_chave_api_aqui" \ https://seu-dominio.com/files/arquivo.jpg

Usando JavaScript:

fetch('/files/arquivo.jpg', { method: 'DELETE', headers: { 'Authorization': `Bearer sua_chave_api_aqui` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "success": true, "message": "Arquivo excluído com sucesso" }
DELETE /api/items/:type/:path

Exclui um arquivo ou diretório de qualquer local do CDN.

Parâmetros de URL

Nome Tipo Descrição Obrigatório
type String Tipo do item: "file" ou "directory" Sim
path String Caminho do item a ser excluído (relativo à raiz do CDN) Sim

Exemplo de Requisição

curl -X DELETE \ -H "Authorization: Bearer sua_chave_api_aqui" \ https://seu-dominio.com/api/items/file/pasta/subpasta/arquivo.jpg

Usando JavaScript:

fetch('/api/items/file/pasta/subpasta/arquivo.jpg', { method: 'DELETE', headers: { 'Authorization': `Bearer sua_chave_api_aqui` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "success": true, "message": "Item excluído com sucesso" }
POST /api/directories

Cria um novo diretório no CDN.

Parâmetros do Corpo (JSON)

Nome Tipo Descrição Obrigatório
directory String Diretório pai onde o novo diretório será criado (relativo à raiz do CDN) Não (padrão: raiz)
name String Nome do novo diretório Sim

Exemplo de Requisição

curl -X POST \ -H "Authorization: Bearer sua_chave_api_aqui" \ -H "Content-Type: application/json" \ -d '{"directory": "pasta", "name": "nova_pasta"}' \ https://seu-dominio.com/api/directories

Usando JavaScript:

fetch('/api/directories', { method: 'POST', headers: { 'Authorization': `Bearer sua_chave_api_aqui`, 'Content-Type': 'application/json' }, body: JSON.stringify({ directory: 'pasta', name: 'nova_pasta' }) }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "success": true, "directory": { "name": "nova_pasta", "path": "pasta/nova_pasta" } }
GET /api/preview/:path

Obtém informações detalhadas e preview de um arquivo.

Parâmetros de URL

Nome Tipo Descrição Obrigatório
path String Caminho do arquivo (relativo à raiz do CDN) Sim

Exemplo de Requisição

curl -X GET \ -H "Authorization: Bearer sua_chave_api_aqui" \ https://seu-dominio.com/api/preview/pasta/subpasta/arquivo.txt

Usando JavaScript:

fetch('/api/preview/pasta/subpasta/arquivo.txt', { method: 'GET', headers: { 'Authorization': `Bearer sua_chave_api_aqui` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Erro:', error));

Resposta de Sucesso (200 OK)

{ "name": "arquivo.txt", "size": 1234, "type": "text", "extension": ".txt", "modified": "2023-05-15T10:30:00.000Z", "url": "https://seu-dominio.com/files/pasta/subpasta/arquivo.txt", "content": "Conteúdo do arquivo de texto..." // Apenas para arquivos de texto }
Nota: Para arquivos de texto (txt, js, css, html, json), o conteúdo do arquivo será incluído na resposta se o tamanho for menor que 100KB. Para outros tipos de arquivo, apenas os metadados serão retornados.

Tipos de Arquivos Permitidos

O CDN aceita os seguintes tipos de arquivos:

O tamanho máximo de arquivo permitido é de 50MB.

Tratamento de Erros

A API retorna códigos de status HTTP padrão para indicar o sucesso ou falha de uma requisição. Em caso de erro, a resposta incluirá um objeto JSON com uma propriedade error contendo uma mensagem descritiva.

Códigos de Status Comuns

Código Descrição
200 OK A requisição foi bem-sucedida
400 Bad Request Parâmetros inválidos ou ausentes
401 Unauthorized Autenticação necessária ou falha na autenticação
404 Not Found Recurso não encontrado
500 Internal Server Error Erro interno do servidor

Exemplo de Resposta de Erro

{ "error": "Tipo de arquivo não permitido" }