Actualmente con el constante uso de las APIs, nos encontramos con la necesidad de poder hacer una integración de sistemas mediante ficheros. Es habitual encontrar sistemas que ofrecen este método de comunicación y es por eso que a continuación desarrollaremos cómo es integrar Magento a otros sistemas mediante este método.
Este tipo de integraciones es un proceso simple que sigue varios pasos. Primero, se debe establecer una ubicación común a la que ambos sistemas tengan acceso. Esta ubicación se utiliza para almacenar ficheros a procesar (generalmente CSV, Json, Xml, etc.). Esto significa que el sistema a integrar enviará ficheros con datos a una carpeta compartida. Magento los leerá y procesará. También puede ocurrir lo contrario: Magento envía ficheros para que otro sistema los procese.
Si bien el éxito de este mecanismo de integración se encuentra en la eficiencia de su proceso simple, pueden haber diversos problemas si el mecanismo por el cual se procesan los ficheros no está bien implementado y no se establecen una serie de criterios.
Los puntos principales a la hora de comenzar una integración de este tipo son:
- Establecer rutas de intercambio de datos entre ambos sistemas,
- Definir qué entidades (datos) se van a integrar y mapeos de datos,
- Determinar tiempos en procesos integradores (Cron jobs),
- Definir un mecanismo unificado de integración.
Establecer rutas de intercambio
Las rutas de intercambio son, en esencia, carpetas situadas en un servidor ftp o carpeta compartida en la red a las que ambos sistemas tienen acceso. Estas carpetas se utilizan como alojamiento para el intercambio de ficheros a procesar.
Al momento de comenzar una integración es necesario crearlas, verificar permisos de lectura/escritura para ambos sistemas y además darles un nombre de manera que rápidamente detectemos a qué refieren. Una buena práctica es establecer una jerarquía de directorios que reflejen el sentido de la información y la entidad en cuestión.
Por ejemplo, supongamos que nuestro sistema (Magento) recibe datos de clientes del sistema al que nos queremos integrar (Sistema B), una buena manera de nombrar las carpetas sería:
/SistemaB_A_Magento/Customers
Con la misma nomenclatura, en caso que nuestro sistema envíe ficheros a ser procesados:
/Magento_A_SistemaB/Customers
Además, es importante crear carpetas de resultados de ejecución. Estas carpetas servirán para alojar los ficheros ya procesados o con errores. Esto permite detectar en todo momento qué datos fueron integrados correctamente y si ocurrió alguna incidencia.
Siguiendo el ejemplo anterior, si agregamos las carpetas de resultados para clientes quedaría:
- Ficheros procesados con éxito: SistemaB_A_SistemaA/Customers/processed
- Ficheros procesados con error: SistemaB_A_SistemaA/Customers/errors
Definir entidades a integrar
Una vez definidas las rutas de intercambio y el formato de ficheros a utilizar, se debe analizar los datos que se van a integrar. Por ejemplo: clientes, órdenes, stock, etc. En este punto, es importante detectar diferencias entre identificadores o nombres entre un sistema y otro. Así podemos realizar el mapeo de datos para que de este modo, ambos sistemas se entiendan.
Un caso habitual, siguiendo con el ejemplo de clientes, son los datos de país/región. Suele ocurrir que para un sistema el identificador de país se represente mediante un número entero (Id interno del País) mientras que para el otro sea texto.
Determinar tiempos en procesos integradores
La actualización de la información en estas integraciones se realiza mediante Cron jobs (tareas programadas). Estas tareas son procesos que se ejecutan en intervalos de tiempo específicos. Determinan con qué frecuencia se actualizan los datos. Los tiempos de actualización se definirán en el requerimiento de negocio. Por ejemplo: “necesitamos actualizar las órdenes cada 2 horas”.
Es por esto que se deben definir tareas programadas (una por entidad a integrar) que, cada cierto tiempo, realice una búsqueda en su carpeta correspondiente de ficheros a procesar. Si existen ficheros, se procesan y se colocan en la carpeta de “procesados” o “error” de dicha entidad para cumplir con el requerimiento de negocio.
Definir un mecanismo unificado de integración: Importancia de un módulo de sincronización
Una vez establecidos los puntos anteriores, es de vital importancia definir un módulo que centralice lo hablado en los puntos anteriores para que funcione como orquestador y sea transversal a todas las entidades.
Este módulo deberá nuclear mecanismos comunes y clases bases de modo que cada entidad que se quiera integrar pueda extender de las clases/interfaces que este módulo.
- Configuración centralizada: Definir una interfaz de configuración única para que cada entidad a integrar agregue su sección con las configuraciones que sean necesarias.
- Conexión unificada: Este módulo deberá proveer las clases bases de conexión a la carpeta compartida.
- Gestión y limpieza de ficheros: Como mencionamos anteriormente, al procesar un fichero, este debe moverse a directorios de resultados. Estos directorios requieren limpieza para evitar problemas de espacio. El módulo integrador, con la ayuda de configuraciones proporcionadas por cada entidad, será responsable de realizar esta tarea.
- Gestión de los datos importados: Este módulo puede implementar un sistema de caché para evitar problemas de performance. No podemos controlar qué ficheros se envían a procesar. Si se envían ficheros erróneos o con información duplicada, puede surgir un problema de performance. Esto incluso podría generar caídas en Magento.
- Gestión de la concurrencia y orden de ejecución: Las integraciones se activan por tareas programadas (Cron Jobs). Estas tareas se ejecutan a intervalos de tiempo específicos. Si, por alguna razón (como un servidor atareado o bases de datos con alta latencia), los cron jobs se solapan, pueden surgir errores en los datos. Estos errores pueden ser muy difíciles de detectar.
En conclusión, la integración de sistemas mediante ficheros es, en algunos casos, la mejor opción. Esto se debe a la simplicidad del mecanismo, siempre que se respeten ciertos criterios durante la integración.
Si necesitas ayuda con tu estrategia, no dudes en contactarnos. ¡Estaremos encantados de ayudarte!