{"id":744,"date":"2025-07-08T10:17:12","date_gmt":"2025-07-08T10:17:12","guid":{"rendered":"https:\/\/sienna-manatee-218967.hostingersite.com\/blogs\/servicios-web-2\/"},"modified":"2026-05-04T04:02:09","modified_gmt":"2026-05-04T04:02:09","slug":"servicios-web","status":"publish","type":"post","link":"https:\/\/exdoo.mx\/blogs\/servicios-web\/","title":{"rendered":"Servicios Web"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/serv-b-mp8JqbkL86IbJeNX-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<p class=\"body\" dir=\"auto\"><span><em><u>\u00bfQu\u00e9 son los servicios web?<\/u><\/em><\/span><\/p>\n<div style=\"background:linear-gradient(135deg,#0A7099 0%,#0d8db8 100%);color:#fff;padding:28px 26px;border-radius:16px;margin:0 0 28px;box-shadow:0 4px 16px rgba(10,112,153,.2);\">\n<div style=\"display:inline-block;background:rgba(255,255,255,.18);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;margin-bottom:12px;color:#fff;\">\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO<\/div>\n<p style=\"font-size:16px;line-height:1.6;margin:0;color:#fff;opacity:.95;\">Son mecanismos que permiten a aplicaciones externas interactuar con la base de datos y la l\u00f3gica de negocio de Odoo a trav\u00e9s 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\u00e1ndar como XML-RPC y JSON-RPC.<\/p>\n<\/div>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><em><u>\u00bfPara qu\u00e9 sirven?<\/u><\/em><\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span>Se usan t\u00edpicamente para:<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfIntegrar Odoo con otros sistemas (por ejemplo, e-commerce, aplicaciones m\u00f3viles, ERPs externos, plataformas de pago, etc.).<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfAutomatizar tareas desde scripts o aplicaciones personalizadas.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfPermitir que un desarrollador realice operaciones program\u00e1ticas sin acceder directamente a la base de datos.<\/span><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><em><u>Ejemplos<\/u><\/em><\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span>Supongamos el siguiente flujo de trabajo:<\/span><\/p>\n<ol style=\"padding-left:22px;line-height:1.9;\">\n<li><span>Un sistema externo (por ejemplo, una tienda online) necesita crear un pedido de venta en Odoo.<\/span><\/li>\n<li><span>Env\u00eda una petici\u00f3n a trav\u00e9s de XML-RPC o JSON-RPC.<\/span><\/li>\n<li><span>Odoo valida la autenticaci\u00f3n, procesa la operaci\u00f3n y devuelve una respuesta estructurada.<\/span><\/li>\n<\/ol>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>De esta forma, se mantiene sincronizada la informaci\u00f3n entre ambas aplicaciones de manera automatizada. Es importante mencionar que el acceso a Odoo est\u00e1 protegido por autenticaci\u00f3n (usuario y contrase\u00f1a, o token) y depende de los permisos de acceso configurados (reglas de acceso y grupos).<\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span><em><u>\u00bfC\u00f3mo se crea un servicio web que se comunique con Odoo?<\/u><\/em><\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>Existen dos principales usos de protocolos est\u00e1ndar de comunicaci\u00f3n que se pueden utilizar.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span><strong>XML-RPC<\/strong><\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>Es un protocolo tradicional, muy usado desde versiones antiguas de Odoo. En el siguiente ejemplo, crearemos un programa Python 3 que interact\u00faa con un servidor Odoo utilizando la librer\u00eda xmlrpc.client.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>Supongamos que queremos crear una venta para la compa\u00f1\u00eda INDUSTRIA ILUMINADORA DE ALMACENES, cuyo ID es 1, utilizando el cliente XOCHILT CASAS CHAVEZ, cuyo ID es 10.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>El c\u00f3digo para crear la venta se ver\u00eda de la siguiente manera:<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/imagen-1-YrDJqb14BkCjJWxz-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Donde<\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span>\u25cfVariables HOST, PORT, DB, USER, PASS: son los datos de conexi\u00f3n servidor, puerto, base de datos y credenciales. En este caso, se est\u00e1 utilizando una base de datos demo llamada \u2018blog\u2019 donde un usuario se llama \u2018admin\u2019, con contrase\u00f1a \u2018odoo\u2019.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfuid: Es el resultado de la conexi\u00f3n al servicio common de Odoo para hacer login y obtener el uid (ID de usuario autenticado).<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfsock: Crea el proxy para llamar m\u00e9todos de modelos (object service).<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cfargs: Establece los campos para crear un pedido, es decir, un registro del modelo de ventas (sale.order).<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u25cforder_id: Es el resultado de la ejecuci\u00f3n de la operaci\u00f3n create sobre el modelo sale.order. Se obtiene su ID.<\/span><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Al ejecutar el programa anterior obtenemos el siguiente resultado:<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/2-dOqD8p44J0f6gnvk-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>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.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/blog_daniel_-_servicios_web-m7Vb593wzauXqNOB-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>JSON-RPC<\/strong><\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>Es un protocolo muy similar a XML-RPC, pero usa JSON como formato de datos, m\u00e1s liviano y legible. Nuevamente tenemos un programa Python 3 que interact\u00faa con un servidor Odoo utilizando las librer\u00edas json y urllib.request.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>Tenemos las mismas condiciones, la compa\u00f1\u00eda INDISTRIA ILUMINADORA DE ALMACENES, cuyo ID es 1, y el cliente XOCHILT CASAS CHAVEZ, cuyo ID es 10.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>El c\u00f3digo para crear una compra se ver\u00eda de la siguiente manera:<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/3-YNq2PbbRngc9z2eO-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Donde<\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>\u25cf Variables HOST, PORT, DB, USER, PASS: son los datos de conexi\u00f3n servidor, puerto, base de datos y credenciales.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cf data: Construye el payload JSON para autenticar al usuario (service: common, method: login).<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cfreq: Hace la petici\u00f3n POST, decodifica respuesta JSON y verifica error.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cfuid: Resultado de la petici\u00f3n anterior. Confirma la autenticaci\u00f3n.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cfSe vuelve a construir la variable data, ahora para ejecutar el m\u00e9todo create sobre el modelo de compras (purchase.order).<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cfSe env\u00eda de nuevo una solicitud, esta vez tomando en cuenta el usuario que se autentic\u00f3 en el sistema.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cfImprime el ID generado para la orden de compra.<\/span><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Al ejecutar el programa anterior, obtenemos el siguiente resultado:<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/4-mePJbQKNaOspPRE8-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>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.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/5-Aq2Jqbja6EuxjqKw-2.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>Consejos r\u00e1pidos:<\/strong><\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>\u25cf      Usa JSON-RPC si es posible, ya que es m\u00e1s ligero y f\u00e1cil de debuggear que XML-RPC.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cf     Verifica permisos y define bien grupos de usuario y reglas de acceso para evitar exposiciones indebidas.<\/span><\/p>\n<div style=\"background:linear-gradient(135deg,#0A7099,#0d8db8);color:#fff;padding:26px;border-radius:14px;margin-top:30px;text-align:center;\">\n<h3 style=\"color:#F1B500;margin-top:0;font-size:20px;\">\ud83d\udccc En resumen<\/h3>\n<p style=\"font-size:15px;line-height:1.7;margin:0;color:#fff;opacity:.95;\"><span>\u25cf     Puedes enviar muchos m\u00e1s datos al servicio dependiendo del m\u00e9todo. Ambos ejemplos anteriores muestran c\u00f3mo crear un registro, pero tambi\u00e9n se puede leer, actualizar y eliminar registros. Considera esto si necesitas consultar informaci\u00f3n antes de realizar cualquier otro m\u00e9todo que haga cambios sobre registros existentes.<\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 son los servicios web? \ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO Son mecanismos que permiten a aplicaciones externas interactuar con la base de datos y la l\u00f3gica de negocio de Odoo\u2026<\/p>\n","protected":false},"author":4,"featured_media":736,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/comments?post=744"}],"version-history":[{"count":3,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/744\/revisions"}],"predecessor-version":[{"id":1983,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/744\/revisions\/1983"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media\/736"}],"wp:attachment":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media?parent=744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/categories?post=744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/tags?post=744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}