Aprende cómo listar backups a través de nuestra API
curl -X GET \
"https://backup-server.x10.mx/api/backups" \
-H "Authorization: Bearer <API_KEY>"
Descripción: Forma segura de listar backups usando autenticación Bearer.
Características:
Respuesta exitosa (200):
{
"success": true,
"data": {
"backups": [...],
"pagination": {
"total": 150,
"limit": 50,
"offset": 0,
"count": 50,
"has_more": true
}
}
}
curl -X GET \
"https://backup-server.x10.mx/api/backups?limit=25&offset=50&order=asc" \
-H "Authorization: Bearer <API_KEY>"
Descripción: Se combinan parámetros de paginación vía URL con autenticación Bearer.
Parámetros en la URL:
limit = Número por página
offset = Saltar N registros
order = asc o desc
Ejemplo práctico:
Obtener backups 51–75:
?offset=50&limit=25&order=asc
#!/bin/bash
API_KEY="<API_KEY>"
BASE_URL="https://backup-server.x10.mx"
# Listar todos los backups
echo "📋 Listando backups..."
response=$(curl -s "${BASE_URL}/api/backups" \
-H "Authorization: Bearer ${API_KEY}")
# Mostrar respuesta con jq
echo "$response" | jq '.'
# Extraer paginación
total=$(echo "$response" | jq -r '.data.pagination.total')
echo ""
echo "Total de backups: $total"
# Últimos 5
echo ""
echo "📌 Últimos 5 backups:"
echo "$response" | jq -r '.data.backups[0:5][] | "• \(.filename) (\(.size_mb)MB) - \(.created_at_formatted)"'
Descripción: Script Bash completo usando Bearer Token.
Requisitos:
import requests
url = "https://backup-server.x10.mx/api/backups"
headers = {
"Authorization": "Bearer <API_KEY>"
}
response = requests.get(url, headers=headers)
data = response.json()
print(f"Status Code: {response.status_code}")
print(data)
Descripción: Forma segura de listar backups usando la biblioteca requests.
Características:
Respuesta exitosa (200):
{
"success": true,
"data": {
"backups": [...],
"pagination": {
"total": 150,
"limit": 50,
"offset": 0,
"count": 50,
"has_more": true
}
}
}
import requests
url = "https://backup-server.x10.mx/api/backups"
headers = {
"Authorization": "Bearer <API_KEY>"
}
params = {
"limit": 25,
"offset": 50,
"order": "asc"
}
response = requests.get(url, headers=headers, params=params)
data = response.json()
print(f"Status Code: {response.status_code}")
print(f"Total backups: {data['data']['pagination']['total']}")
Descripción: Se combinan parámetros de paginación usando el parámetro `params` de requests.
Parámetros disponibles:
limit = Número por página
offset = Saltar N registros
order = asc o desc
Ventajas de requests:
Los parámetros se codifican automáticamente y el código es más legible.
import requests
import json
def list_backups():
base_url = "https://backup-server.x10.mx"
api_key = "<API_KEY>"
url = f"{base_url}/api/backups"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
try:
print("📋 Listando backups...")
response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status() # Lanza excepción para códigos 4xx/5xx
data = response.json()
if data.get("success"):
backups = data["data"]["backups"]
pagination = data["data"]["pagination"]
print(f"✅ Total de backups: {pagination['total']}")
print(f"📄 Mostrando {len(backups)} backups\n")
# Mostrar últimos 5 backups
print("📌 Últimos 5 backups:")
for backup in backups[:5]:
print(f"• {backup['filename']} ({backup.get('size_mb', 'N/A')}MB) - {backup.get('created_at_formatted', 'N/A')}")
else:
print(f"❌ Error: {data.get('message', 'Error desconocido')}")
except requests.exceptions.RequestException as e:
print(f"❌ Error de conexión: {e}")
except json.JSONDecodeError as e:
print(f"❌ Error decodificando JSON: {e}")
except KeyError as e:
print(f"❌ Error en estructura de respuesta: {e}")
if __name__ == "__main__":
list_backups()
Descripción: Script Python completo con manejo robusto de errores y procesamiento de datos.
Características de seguridad:
Requisitos:
pip install requests
const axios = require('axios');
const API_KEY = "<API_KEY>";
const BASE_URL = "https://backup-server.x10.mx";
async function listBackups() {
try {
const response = await axios.get(`${BASE_URL}/api/backups`, {
headers: {
'Authorization': `Bearer ${API_KEY}`
}
});
console.log('Status:', response.status);
console.log('Data:', response.data);
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
listBackups();
Descripción: Listar backups usando Axios con async/await.
Características:
Respuesta exitosa (200):
{
"success": true,
"data": {
"backups": [...],
"pagination": {
"total": 150,
"limit": 50,
"offset": 0,
"count": 50,
"has_more": true
}
}
}
const axios = require('axios');
const API_KEY = "<API_KEY>";
const BASE_URL = "https://backup-server.x10.mx";
async function listBackupsWithPagination() {
try {
const response = await axios.get(`${BASE_URL}/api/backups`, {
headers: {
'Authorization': `Bearer ${API_KEY}`
},
params: {
limit: 25,
offset: 50,
order: 'asc'
}
});
const data = response.data;
console.log(`Total backups: ${data.data.pagination.total}`);
console.log(`Current page: ${data.data.backups.length} items`);
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
listBackupsWithPagination();
Descripción: Paginación usando el objeto `params` de Axios.
Parámetros disponibles:
limit = Número por página
offset = Saltar N registros
order = asc o desc
Ventajas de Axios:
Los parámetros se codifican automáticamente y el manejo de errores es más robusto que fetch nativo.
const axios = require('axios');
class BackupManager {
constructor(apiKey, baseUrl) {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.axiosInstance = axios.create({
baseURL: baseUrl,
timeout: 30000,
headers: {
'Content-Type': 'application/json'
}
});
// Interceptor para auth
this.axiosInstance.interceptors.request.use(
(config) => {
config.headers.Authorization = `Bearer ${this.apiKey}`;
return config;
},
(error) => Promise.reject(error)
);
}
async listBackups(params = {}) {
try {
console.log('📋 Listando backups...');
const response = await this.axiosInstance.get('/api/backups', {
params: {
limit: params.limit || 50,
offset: params.offset || 0,
order: params.order || 'desc'
}
});
const { data } = response;
if (data.success) {
const { backups, pagination } = data.data;
console.log(`✅ Total de backups: ${pagination.total}`);
console.log(`📄 Mostrando ${backups.length} backups\n`);
// Mostrar últimos 5 backups
console.log('📌 Últimos 5 backups:');
backups.slice(0, 5).forEach(backup => {
console.log(`• ${backup.filename} (${backup.size_mb || 'N/A'}MB) - ${backup.created_at_formatted || 'N/A'}`);
});
return data.data;
} else {
throw new Error(data.message || 'Error en la respuesta del servidor');
}
} catch (error) {
if (error.response) {
// Error de servidor (4xx, 5xx)
console.error(`❌ Error ${error.response.status}:`, error.response.data?.message || error.message);
} else if (error.request) {
// Error de red
console.error('❌ Error de conexión:', error.message);
} else {
// Otros errores
console.error('❌ Error:', error.message);
}
throw error;
}
}
}
// Uso del script
const backupManager = new BackupManager(
"<API_KEY>",
"https://backup-server.x10.mx"
);
// Ejecutar
backupManager.listBackups()
.then(() => console.log('\n🎯 Listado completado'))
.catch(() => console.log('\n💥 Listado fallido'));
Descripción: Clase completa con interceptores, manejo robusto de errores y mejores prácticas.
Características avanzadas:
Instalación:
npm install axios
O si usas ES modules:
import axios from 'axios';
Alternativa con fetch nativo:
// Disponible en Node.js 18+ sin dependencias externas
// Pero requiere más código para manejo de errores y JSON
-L permite seguir redirecciones automáticas.
Accede a tus backups o explora la documentación completa