OdooWiki OCA HUB

WebService Core

webservice_core folder_open OCA/web-api open_in_new
Sin categoría Licencia: AGPL-3

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.0

Permite 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

base

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-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado de confirmación: 1 confirmada, 8 sin información de 9 versiones.

terminal Instalación y uso

Documentación de OCA · Odoo 18.0

Vaya 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.ref no se usa aquí; busque por tech_name en su lugar).
  • Protocolo: solo HTTP Request está 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-Type predeterminada 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 object

call(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.content

Traducció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.

info

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.