Este módulo proporciona el modelo webservice.backend con su autenticación (pública, usuario/contraseña, clave API) y sus funcionalidades de llamada HTTP (get/post/put/delete).
No tiene dependencia de component ni de server_environment, por lo que puede utilizarse como un bloque de construcción ligero por cualquier módulo que necesite configurar y llamar a un webservice saliente, sin arrastrar frameworks adicionales.
Sobre un backend, puede configurar registros webservice.endpoint específicos y con nombre mediante la UI, en lugar de construir las llamadas únicamente en Python mediante webservice.backend.call(method, url_args, ...). Cada endpoint agrupa una descripción obligatoria, un método HTTP y una ruta relativa fijos (añadida a la URL del backend), cabeceras estáticas y una anulación de autenticación opcional, totalmente independiente de la del backend. Los endpoints se llaman con endpoint.call(...); llamar directamente al backend con backend.call(method, ...) sigue siendo totalmente compatible.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 18.0Permite a los administradores registrar servicios web externos (backends) y endpoints con nombre con su URL, método HTTP, cabeceras, parámetros de consulta y autenticación, para que otros módulos puedan llamarlos sin frameworks adicionales.
Este módulo añade un área de configuración para servicios web salientes. Aparece en el menú Custom como dos entradas: WebService Backend y WebService Endpoint.
En un backend se registra un nombre, un nombre técnico, la URL base, el protocolo (HTTP), un tipo de contenido (JSON, XML o Form), un tiempo de espera y cómo autenticarse: público, usuario y contraseña, o clave API (con el nombre de la cabecera que transporta la clave). También se pueden listar cabeceras estáticas y parámetros de querystring que se envían con cada llamada. Un botón inteligente muestra cuántos endpoints pertenecen al backend y los abre.
Un endpoint pertenece a un backend y añade una descripción obligatoria, un método HTTP fijo (GET, POST, PUT o DELETE), una ruta relativa añadida a la URL del backend, y sus propias cabeceras y parámetros de querystring. Por defecto reutiliza la autenticación del backend; si se marca 'Override Authentication' hay que elegir un tipo de autenticación y rellenar sus credenciales, de lo contrario Odoo se niega a guardar.
Reglas de negocio: los nombres técnicos se generan a partir del nombre y deben ser únicos (por backend para los endpoints); se exigen las credenciales requeridas por el tipo de autenticación elegido; se muestra una URL para copiar/pegar en ambas pantallas. Los backends y los endpoints están restringidos por compañía en configuraciones multi-compañía, y solo los administradores pueden gestionarlos. El módulo en sí solo almacena configuración; las llamadas reales las realizan otros módulos o código.
Depende de
Lo necesitan otros módulos
Modelos y campos (5)
- webservice.header · modelo nuevoname, value, res_id (Record), res_model
- webservice.backend · modelo nuevourl, name, company_id (Company), endpoint_ids (Endpoints), endpoint_count
- webservice.endpoint · modelo nuevoname, path, active, protocol, auth_type, tech_name, backend_id, company_id, description, http_method, override_auth (Override Authentication)
- webservice.request.mixin · modelo nuevoapi_key (API Key), timeout, password, protocol, username, auth_type, tech_name, header_ids (Headers), content_type, api_key_header (API Key header), full_url_display, querystring_param_ids (Querystring Params)
- webservice.querystring.param · modelo nuevoname, value, res_id (Record), res_model
Texto generado por IA (DeepSeek) al leer el código de la versión 18.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 1 confirmada, 8 sin información de 9 versiones.
Fuentes · Odoo 18.0
Confirmado el 2026-11-03 en la rama 18.0 de OCA/web-api.
terminal Instalación y uso
Documentación de OCA · Odoo 18.0Configuración
Fuente · Odoo 18.0Vaya a Ajustes > Técnico > WebService Backend (requiere el grupo Administración / Ajustes) y cree un nuevo backend:
- Nombre / Nombre técnico: una etiqueta y una clave técnica única que usará para buscar el backend desde el código (p. ej.,
env.refno se usa aquí; busque portech_nameen su lugar). - Protocolo: solo
HTTP Requestestá disponible en este módulo. - URL: la URL base a la que es relativa cada llamada, p. ej.
https://api.example.com. Puede contener tokens{placeholder}(consulte Uso), p. ej.https://api.example.com/{endpoint}. - Content-Type: cabecera
Content-Typepredeterminada opcional para cada llamada. - Timeout: tiempo de espera opcional en segundos para toda la solicitud (conexión + lectura). Si se deja vacío, una llamada espera indefinidamente.
En las pestañas Headers y Querystring Params puede configurar valores predeterminados estáticos, que se combinan en cada llamada (consulte Uso).
A continuación, configure la autenticación mediante Tipo de autenticación:
- Público: no se necesitan credenciales.
- Nombre de usuario y contraseña: se envían como HTTP Basic Auth. Requiere Nombre de usuario y Contraseña.
- Clave API: se envía como una cabecera personalizada. Requiere Clave API y cabecera de Clave API (el nombre de la cabecera bajo la que se envía, p. ej.
X-Api-Key).
Los campos obligatorios dependen del tipo de autenticación seleccionado; el formulario solo muestra y exige los que corresponden, y el guardado lo aplica.
Cada webservice.endpoint (consulte Descripción) tiene su propio Content-Type, Timeout, Headers y Querystring Params, que anulan los del backend para ese endpoint concreto: configure solo lo que deba diferir.
Busca el backend (por ejemplo, por su nombre técnico) y llámalo:
backend = env["webservice.backend"].search([("tech_name", "=", "my_api")])
result = backend.call("get") # -> the full requests.Response objectcall(method, *args, **kwargs) acepta cualquiera de los verbos HTTP estándar (get, post, put, delete) y reenvía todo lo demás a requests, por lo que también funcionan cualquiera de sus argumentos de palabra clave (data, json, params, files, ...):
backend.call("post", data=b"<xml>...</xml>")
backend.call("post", json={"foo": "bar"})URL: por defecto se usa el propio url del backend. Pasa url para acceder a una ruta diferente: las rutas relativas se añaden a la URL del backend, una URL completa http(s):// se usa tal cual:
backend.call("get", url="orders") # -> <backend url>/orders
backend.call("get", url="https://other.example.com/orders")Si la URL del backend (o el url pasado arriba) contiene tokens {placeholder}, rellénalos con url_params:
# backend.url == "https://api.example.com/{endpoint}"
backend.call("get", url_params={"endpoint": "orders"})Cabeceras: pasa headers para añadir o sobrescribir cabeceras en esa llamada; se combinan sobre las cabeceras estáticas propias del backend (configuradas en la pestaña "Headers"), Content-Type y las cabeceras derivadas de la autenticación (por ejemplo, la cabecera de la clave API): el kwarg headers prevalece en las claves coincidentes:
backend.call("get", headers={"X-Request-Id": "42"})Parámetros de querystring: se envían mediante requests' params=, que no deben confundirse con url_params de arriba, que rellena los tokens {placeholder} en la propia ruta de la URL. Configura los valores estáticos predeterminados en la pestaña "Querystring Params": un valor allí puede contener a su vez un {placeholder}, resuelto con el mismo url_params usado para la URL. Un kwarg params explícito pasado a call() prevalece sobre la configuración estática en las claves coincidentes:
backend.call("get", params={"verbose": "1"})Anulación de autenticación: pasa auth para omitir el tipo de autenticación configurado en el backend en una sola llamada (el mismo formato que acepta requests, por ejemplo, una tupla (user, password)):
backend.call("get", auth=("other_user", "other_password"))Tiempo de espera: pasa timeout para anular el tiempo de espera configurado en el propio backend (en segundos) en una sola llamada:
backend.call("get", timeout=5)Respuesta: call() siempre devuelve el objeto requests.Response completo (código de estado, cabeceras, contenido, ...):
response = backend.call("get")
response.status_code
response.contentTraducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.