REST y Odoo - Usando el módulo odoo_api

Una alternativa liviana y efectiva a los módulos REST y XML-RPC

Gustavo Orrillo
- 07/01/2021 - 1 min. de lectura


Muchas veces vamos a necesitar interactuar con Odoo, integrar una aplicación de terceros en tiempo real. Y para ello tenemos por lo menos dos opciones: XML-RPC y REST. XML-RPC es una interface muy buena, rápida y muy flexible. Pero cuenta con el problema que no es facil de implementar en todos los lenguajes y muchas veces nos podemos encontrar con problemas interactuando con el server de Odoo. La otra opción es usando los módulos ya existentes de REST, por ejemplo los módulos provistos por OCA, y la verdad es que es un módulo muy sólido pero no es precisamente flexible a la hora de implementarlo. Hay que realizar mucho trabajo a nivel backend para hacerlo andar.

Es por ello que Ignacio tuvo la genial idea de implementar el módulo odoo_api que combina los beneficios de REST con la flexibilidad de XML-RPC. Permite realizar llamadas REST utilizando una sintaxis similar a la de XML-RPC. El día de hoy lo estuve probando, y llegue a hacerlo andar. Es por eso que quiero compartir un ejemplo de una búsqueda y lectura de datos de clientes/proveedores que hice de Odoo mediante REST (usando el módulo odoo_api).

Es por ello que si necesitan implementar una interface REST en Odoo, y quieren ahorrar mucho trabajo de desarrollo a nivel backend, les recomiendo probar odoo_api, el cual puede ser descargado del repositorio de Moldeo. Y ahora al código de ejemplo utilizando la librería requests:

#!/usr/bin/python
import requests
import json
# Setea variables, como por ejemplo URL y los parametros de busqueda. Por ejemplo el modelo
headers = {'Content-type': 'application/json'}
url = 'http://odoo11:8069/odoo-api/object/search'
data = {'params': {'model': 'res.partner', 'filters': [], 'keys': {'limit': 2000}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda (mediante un POST)
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(res)
# Setea otras variables, como por ejemplo URL para busqueda/lectura y los parametros de busqueda. Por ejemplo el modelo
url = 'http://odoo11:8069/odoo-api/object/search_read'
data = {'params': {'model': 'res.partner', 'filters': [], 'keys': {'limit': 2000, 'fields': ['name','zip']}, 'db': 'test-de-accounting', 'login': 'admin', 'password': 'admin'}}
# Realiza la busqueda / lectura
response = requests.post(url,data=json.dumps(data),headers=headers)
# Imprime los resultados
print(response.status_code)
print(response.content)
res = json.loads(response.content)
for res in res['result']:
        print(res)



Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.