Saltar a contenido

API Reference

Protocolo JSON-RPC 2.0

Fracttal ETL Hub implementa el protocolo JSON-RPC 2.0 para todas las operaciones ETL. Todas las solicitudes deben seguir esta estructura:

Estructura de Solicitud

{
  "jsonrpc": "2.0",
  "method": "string",
  "params": {
    "id": "string",
    "config": {
      "source": {...},
      "transform": {...},
      "target": {...}
    },
    "environment": "production" | "develop"
  },
  "id": "string"
}

Campos Requeridos

Campo Tipo Descripción
jsonrpc string Versión del protocolo. Debe ser "2.0"
method string Método a ejecutar. Actualmente solo "etl.etl_update"
params object Parámetros del método
id string Identificador único de la solicitud

Método etl.etl_update

Descripción

Ejecuta una configuración ETL completa con origen, transformación y destino.

Parámetros

params.id

  • Tipo: string
  • Descripción: Identificador único de la configuración ETL
  • Requerido: ✅
  • Ejemplo: "config-001"

params.config

  • Tipo: object
  • Descripción: Configuración completa del ETL
  • Requerido: ✅
params.config.source
  • Tipo: object
  • Descripción: Configuración del origen de datos
  • Requerido: ✅
params.config.transform
  • Tipo: object
  • Descripción: Configuración de transformación de datos
  • Requerido: ❌
params.config.target
  • Tipo: object
  • Descripción: Configuración del destino de datos
  • Requerido: ✅

params.environment

  • Tipo: string
  • Descripción: Entorno de ejecución
  • Valores: "production", "develop"
  • Requerido: ✅
  • Por defecto: "develop"

Respuesta Exitosa

{
  "jsonrpc": "2.0",
  "result": {
    "status": "success",
    "execution_id": "exec-12345",
    "message": "ETL executed successfully"
  },
  "id": "request-001"
}

Respuesta de Error

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": {
      "details": "Validation error details"
    }
  },
  "id": "request-001"
}

Esquemas de Validación

Conexiones

Cada tipo de conexión tiene su propio esquema de validación definido en los modelos Pydantic. Los esquemas se validan automáticamente antes de la ejecución.

Operaciones

Las operaciones disponibles dependen del tipo de conexión y están definidas en los archivos JSON de configuración.

Transformaciones

Las transformaciones siguen la sintaxis JSON Logic con operadores custom adicionales.

Códigos de Error

Código Descripción
-32700 Parse error
-32600 Invalid request
-32601 Method not found
-32602 Invalid params
-32603 Internal error
-32000 Server error

Ejemplos Completos

ETL Básico

{
  "jsonrpc": "2.0",
  "method": "etl.etl_update",
  "params": {
    "id": "etl-basic-001",
    "config": {
      "source": {
        "connection": {
          "id_type": 9,
          "name": "PostgreSQL",
          "parameters": {
            "host": "localhost",
            "port": 5432,
            "database": "mydb",
            "username": "user",
            "password": "pass"
          }
        },
        "operation": "select",
        "parameters": {
          "query": "SELECT * FROM users WHERE active = true"
        }
      },
      "target": {
        "connection": {
          "id_type": 3,
          "name": "Google Sheets",
          "parameters": {
            "spreadsheet_id": "123456789",
            "credentials_file": "/path/to/creds.json"
          }
        },
        "operation": "append",
        "parameters": {
          "sheet_name": "Users"
        }
      }
    },
    "environment": "production"
  },
  "id": "req-001"
}

ETL con Transformación

{
  "jsonrpc": "2.0",
  "method": "etl.etl_update",
  "params": {
    "id": "etl-transform-001",
    "config": {
      "source": {
        "connection": {
          "id_type": 9,
          "name": "PostgreSQL",
          "parameters": {
            "host": "localhost",
            "port": 5432,
            "database": "mydb",
            "username": "user",
            "password": "pass"
          }
        },
        "operation": "select",
        "parameters": {
          "query": "SELECT id, first_name, last_name, email FROM users"
        }
      },
      "transform": {
        "rename": [
          [{"var": "first_name"}, "nombre", "string"],
          [{"var": "last_name"}, "apellido", "string"]
        ],
        "add": [
          [{"var": "nombre"}, " ", {"var": "apellido"}, "full_name", "string"]
        ]
      },
      "target": {
        "connection": {
          "id_type": 3,
          "name": "Google Sheets",
          "parameters": {
            "spreadsheet_id": "123456789",
            "credentials_file": "/path/to/creds.json"
          }
        },
        "operation": "append",
        "parameters": {
          "sheet_name": "Users"
        }
      }
    },
    "environment": "production"
  },
  "id": "req-002"
}