En el mundo de las conexiones externas a ciertas plataformas hay un sin fin de opiniones y gustos. Y contra los gustos no se puede hacer nada. En desarrollo pasa igual, no hay mejores o peores opciones; pero si podemos hablar de opciones más eficientes que otras en distintos niveles: lectura de código y velocidad del sistema.
Estarán al tanto de las formas de conexión con el ERP Odoo, Codize mismo tiene en su core dos posibildades: mediante XMLRPC y mediante API. Sin embargo, en esta guerra de elegir lo más óptimo, al momento de crear una aplicación de conexión externa, ¿qué es mejor?
Diferencias entre plataformas
XMLRPC es el protocolo por defecto de comunicación que posee Odoo para que nos conectemos a las bases de datos. La información debe ser previamente codificada a XML con un formato específico y enviada al servidor. Por esta razón, suele requerir librerías de terceros.
Por su parte API es más bien un tipo de arquitectura. No es un protocolo, cada desarrollador arma el suyo y es por eso que muchos servicios de conexión (por ejemplo, conexión entre retails) tienen su propia documentación al respecto. Pero por lo general son llamadas POST o GET con determinados datos para obtener determinadas respuestas. A diferencia de XMLRPC, al no existir una librería hay que crear cada llamada, por lo tanto al principio es más lento de implementar.
Velocidad de Respuesta
Acá está la verdad de la milanesa. ¿cuál tarda menos? La lógica nos dice que el API es, a priori, más eficiente. Esto se debe a que XMLRPC debe comprimir el mensaje y codificarlo a XML del lado del cliente, mandarlo al servidor, y luego el servidor debe decodificarlo, generar el request sobre la base de datos, obtener una respuesta, codificarla a XML, mandarla al cliente, y a su vez el cliente debe decodificar esa respuesta XML. Suena bastante trayecto, pero el API también tiene codificaciones internas en la conexión, solo que son menos evidentes. ¿qué dicen los números fríos?
Aclaro la metodología, en un server local (es decir, sin latencia por conexión), se inicia un Odoo y se espera que haga la primer carga (ya que siempre demora más). Luego se ejecuta 5 veces seguidas el mismo request, se guardan los resultados y se determina el promedio redondeado. Dicho esto, no se consideran a estos testeos 100% determinantes, solo sirven para dar una referencia.
XMLRPC
request data server: 326, 282, 262, 292, 317 - Promedio: 296
request data product.template (20 registros, 9 campos): 723, 715, 757, 755, 844 - Promedio: 759.
API
request data server: 112, 99, 96, 118, 63 - Promedio: 98
request data product.template (20 registros, 9 campos): 342, 300, 246, 273, 252 - Promedio: 283.
Claramente la API es más rápida, lo cual es lógico, hay un proceso de codificación que no realiza. Pero en el caso del request de registros hay una parte que se puede optimizar, se debe a que XMLRPC solicitá realizar un login con cada request, y eso lógicamente demora más. Mi opción en estos casos es realizar el login al principio del proceso solo una vez, almacenar el UID y luego utilizarlo para hacer los request posteriores. Y en este caso los tiempos de XMLRPC son muy interesantes:
request data product.template (20 registros, 9 campos, con UID): 456, 183, 332, 334, 301 - Promedio: 321
Es verdad que cada tanto se dan valores muy por debajo de la media, pero en líneas generales estamos en un número muy cercano al request en API. Sigue ganando API, pero por muy poco. ¿Es una diferencia significativa? Toda diferencia lo es, pero no es tan determinante si tenemos en cuenta algunas ventajas de XMLRPC.
Ventajas de XMLRPC
Es el protocolo oficial de Odoo, o al menos el que Odoo en su momento pensó para su plataforma. Es verdad que envejeció mal, no es un protocolo estandar, pero sigue siendo el "oficial" y por lo tanto ya hay varias cosas realizadas para tomar de base. Fuera de eso, la única ventaja que le encuentro hoy es que con XMLRPC es muy sencillo trabajar con múltiples bases de datos en Odoo, algo que cada vez se utiliza menos, pero no deja de ser necesario en ciertos negocios.
Ventajas de API
Para empezar, como vimos, tiene una mejor respuesta al ser en un tiempo mínimo de resolución del request. A esto le sumaría lo estandarízado que está el concepto de POST o GET en casi todos los lenguajes, mucho más que XMLRPC; y la posibilidad de documentar el API de forma acorde. API tampoco requiere que el usuario esté registrado en odoo y haga login, de esa manera es la mejor forma de hacer que un usuario portal pueda consumir data del sistema que nosotros decidamos.
Conclusiones
La verdad es un tema que da para muchas partes (seguramente lo haga) pero queda claro que API presenta una cantidad mayor de ventajas que XMLRPC. Si se está desarrollando una aplicación externa para usuarios casuales (ecommerce como Codize Shop, por ejemplo) entonces API es la mejor opción; si buscamos conectarnos con otro equipo de trabajo API será mas aconsejable debido a que el mundo de la informática ya entiende los request como algo estándar; si solo nos interesa la velocidad de respuesta API también nos ofrece un mejor panorama. El único caso donde XMLRPC tiene una carta bajo la manga es para trabajar con múltiples bases de datos; y agregaría para la creación de scripts de migración o para conectar dos Odoo (es algo que hace muy ágil). Para todo lo demás, existe API.