Servicios Web
En este blog exploraremos qué son los servicios web dentro de Odoo, cómo funcionan, qué protocolos utilizan y cómo se pueden utilizar como una herramienta que optimiza procesos y mantiene datos sincronizados entre múltiples aplicaciones. Si estás pensando en automatizar tareas, integrar Odoo con otros sistemas o simplemente quieres entender mejor cómo se logra esta comunicación entre máquinas, este blog es para ti.
Daniel Sánchez
7/8/20254 min read


¿Qué son los servicios web?
Son mecanismos que permiten a aplicaciones externas interactuar con la base de datos y la lógica de negocio de Odoo a través de Internet, sin necesidad de usar la interfaz de usuario (la web frontend de Odoo). Expone funciones para crear, leer, actualizar o eliminar datos (CRUD) y ejecutar acciones, mediante protocolos estándar como XML-RPC y JSON-RPC.
¿Para qué sirven?
Se usan típicamente para:
●Integrar Odoo con otros sistemas (por ejemplo, e-commerce, aplicaciones móviles, ERPs externos, plataformas de pago, etc.).
●Automatizar tareas desde scripts o aplicaciones personalizadas.
●Permitir que un desarrollador realice operaciones programáticas sin acceder directamente a la base de datos.
Ejemplos
Supongamos el siguiente flujo de trabajo:
Un sistema externo (por ejemplo, una tienda online) necesita crear un pedido de venta en Odoo.
Envía una petición a través de XML-RPC o JSON-RPC.
Odoo valida la autenticación, procesa la operación y devuelve una respuesta estructurada.
De esta forma, se mantiene sincronizada la información entre ambas aplicaciones de manera automatizada. Es importante mencionar que el acceso a Odoo está protegido por autenticación (usuario y contraseña, o token) y depende de los permisos de acceso configurados (reglas de acceso y grupos).
¿Cómo se crea un servicio web que se comunique con Odoo?
Existen dos principales usos de protocolos estándar de comunicación que se pueden utilizar.
XML-RPC
Es un protocolo tradicional, muy usado desde versiones antiguas de Odoo. En el siguiente ejemplo, crearemos un programa Python 3 que interactúa con un servidor Odoo utilizando la librería xmlrpc.client.
Supongamos que queremos crear una venta para la compañía INDUSTRIA ILUMINADORA DE ALMACENES, cuyo ID es 1, utilizando el cliente XOCHILT CASAS CHAVEZ, cuyo ID es 10.
El código para crear la venta se vería de la siguiente manera:


Donde
●Variables HOST, PORT, DB, USER, PASS: son los datos de conexión servidor, puerto, base de datos y credenciales. En este caso, se está utilizando una base de datos demo llamada ‘blog’ donde un usuario se llama ‘admin’, con contraseña ‘odoo’.
●uid: Es el resultado de la conexión al servicio common de Odoo para hacer login y obtener el uid (ID de usuario autenticado).
●sock: Crea el proxy para llamar métodos de modelos (object service).
●args: Establece los campos para crear un pedido, es decir, un registro del modelo de ventas (sale.order).
●order_id: Es el resultado de la ejecución de la operación create sobre el modelo sale.order. Se obtiene su ID.
Al ejecutar el programa anterior obtenemos el siguiente resultado:


En este caso, ha creado una venta con el id 31. Al ingresar a Odoo y verificar la venta con el id anterior, obtenemos que, en efecto, se ha creado la venta.


JSON-RPC
Es un protocolo muy similar a XML-RPC, pero usa JSON como formato de datos, más liviano y legible. Nuevamente tenemos un programa Python 3 que interactúa con un servidor Odoo utilizando las librerías json y urllib.request.
Tenemos las mismas condiciones, la compañía INDISTRIA ILUMINADORA DE ALMACENES, cuyo ID es 1, y el cliente XOCHILT CASAS CHAVEZ, cuyo ID es 10.
El código para crear una compra se vería de la siguiente manera:


Donde
● Variables HOST, PORT, DB, USER, PASS: son los datos de conexión servidor, puerto, base de datos y credenciales.
● data: Construye el payload JSON para autenticar al usuario (service: common, method: login).
●req: Hace la petición POST, decodifica respuesta JSON y verifica error.
●uid: Resultado de la petición anterior. Confirma la autenticación.
●Se vuelve a construir la variable data, ahora para ejecutar el método create sobre el modelo de compras (purchase.order).
●Se envía de nuevo una solicitud, esta vez tomando en cuenta el usuario que se autenticó en el sistema.
●Imprime el ID generado para la orden de compra.
Al ejecutar el programa anterior, obtenemos el siguiente resultado:


En este caso, ha creado una compra con el id 13. Al ingresar a Odoo y verificar la compra con el id anterior, obtenemos que, en efecto, se ha creado la compra.


Consejos rápidos:
● Usa JSON-RPC si es posible, ya que es más ligero y fácil de debuggear que XML-RPC.
● Verifica permisos y define bien grupos de usuario y reglas de acceso para evitar exposiciones indebidas.
● Puedes enviar muchos más datos al servicio dependiendo del método. Ambos ejemplos anteriores muestran cómo crear un registro, pero también se puede leer, actualizar y eliminar registros. Considera esto si necesitas consultar información antes de realizar cualquier otro método que haga cambios sobre registros existentes.
En Exdoo podemos desarrollar cualquier módulo para Odoo en México, implementamos tu ERP con consultores experimentados no solo en Odoo sino en procesos de negocios, tenemos 10 años trabajando solamente con Odoo en México y otros países.
Exdoo TI S DE RL DE CV
10 años de experiencia en Odoo