Descubrimiento por URL
Este asistente parte de la dirección de una API y devuelve una propuesta de configuración. Es el generalista del conjunto: sirve para cualquier sistema que hable HTTP, tenga o no documentación formal.
Se abre con el ícono de varita en la fila de la Aplicación, en Aplicaciones.

Qué puede informar
Una URL y, opcionalmente, un texto diciendo qué quiere de esa API.
| Usted informa | El CMS hace |
|---|---|
La URL de un contrato (.../swagger.json, .../$metadata, .../?wsdl) | Lee el contrato y extrae las operaciones con precisión |
| La URL base del sistema | Busca el contrato en las rutas conocidas; si no lo encuentra, sondea la URL |
La URL de la raíz de un servicio OData (.../OData.svc, /sap/opu/odata/sap/API_X_SRV) | Encuentra el $metadata justo debajo y lee el servicio entero — ver OData |
| URL + un prompt (“necesito traer las órdenes abiertas y confirmar el apunte”) | Usa el texto para priorizar y nombrar lo que interesa |
Contratos reconocidos
El tipo se detecta por el contenido, no por la extensión — un Swagger servido en /api sin
extensión alguna se reconoce igual.
| Formato | Observación |
|---|---|
| OpenAPI / Swagger | JSON y YAML, versiones 2 y 3 |
| OData | v2, v3 y v4 — SAP Gateway, S/4HANA, servicios .NET. Cada EntitySet se vuelve lectura y escritura; funciones y acciones se vuelven operaciones propias |
| WSDL | Cada operación SOAP con su soapAction |
| Colección Postman | v2.1 — útil cuando la API no tiene contrato, pero alguien ya armó la colección |
MCP (tools/list) | Un servidor MCP visto como catálogo de operaciones |
Aquí el CMS es cliente de un servidor MCP de terceros, leyendo su catálogo de operaciones. El camino contrario — una IA externa configurando el CMS — es el Servidor MCP, en Servicios de Seguridad.
Rutas que prueba solo
Primero, la propia dirección que usted pegó: si ya es el contrato (.../$metadata,
.../openapi.json, ...?wsdl), es esa la que vale. Junto con ella, el $metadata justo debajo y
el del nivel de arriba — el caso de quien pegó la raíz de un servicio OData o la URL de un
EntitySet.
Si nada de eso responde, el CMS prueba las rutas de convención desde el host y desde los primeros
niveles de la dirección: /openapi.json, /swagger.json, /api-json, /v3/api-docs,
/swagger/v1/swagger.json, /api-docs y /$metadata — este en todos los niveles de la ruta,
porque la raíz de un servicio SAP queda profunda. Parámetros como el sap-client van junto.
/api-json está en la lista porque es la convención de NestJS — el framework del propio CMS. Si
su API es NestJS, informe la URL base y listo.
OData
Informe la raíz del servicio, no solo el host. Un host suele publicar varios servicios — un SAP
Gateway tiene cientos —, y solo la raíz de cada uno tiene $metadata. La URL de un EntitySet o de
una entidad (.../Customers('ALFKI')) también sirve: el CMS sube hasta la raíz.
La versión sale del propio $metadata, y la configuración sigue sus reglas:
| Lo que cambia por versión | Cómo sale |
|---|---|
| Llave en la URL | Texto entre comillas — /OrdemSet('4711'), como exige SAP. Hasta la v3, Guid, Int64, Decimal y fecha llevan su literal propio (guid'...', 10L, 1.5M, datetime'...'). La llave compuesta sale con nombre |
| Cuerpo JSON | Hasta la v3, Int64 y Decimal van como texto ("Menge": "10.000") y Edm.DateTime sin huso; en la v4, número. El tipo complejo se vuelve objeto, y la herencia entre entidades se resuelve |
| Funciones y acciones | v2: operación de servicio, con los parámetros en la URL incluso en el POST. v3: la acción es POST con los parámetros en el cuerpo, la función es GET. v4: FunctionImport es GET, con los valores en los Parámetros Fijos; ActionImport es POST. La vinculada a una entidad sale desde ella — /Ordem('4711')/<namespace>.Liberar |
| Respuesta de ejemplo | Con el envoltorio que la Colecta recibe de hecho: d.results en la v2, value con odata.metadata en la v3, value con @odata.context en la v4 |
Lo que el servicio declara se respeta: un conjunto de solo lectura (sap:creatable="false" en SAP,
anotaciones Capabilities en la v4) no recibe escritura, una entidad de medios no recibe creación
por JSON, y el $format=json ya viene en los Parámetros Fijos de la Colecta — sin él SAP responde
en XML.
Una entidad con control de concurrencia (ETag) exige el encabezado If-Match para modificar o
eliminar, y la Entrega no lo envía — la operación llega a la lista con ese aviso. En la v2, la
modificación sale como PATCH: SAP Gateway la acepta, pero un servidor v2 que no sea SAP puede
exigir MERGE.
Aplicación SAP Gateway
En una Aplicación del tipo SAP Gateway, la URL ya abre como
http://host:puerto/sap/opu/odata/sap/ — complétela con el servicio (PP_PRODOPS_CONFIRM_SRV/).
Dejar solo ese prefijo se rechaza con un mensaje claro: SAP respondería 500 “Access using a ‘ZERO’
service”, porque ahí no hay ningún servicio.
- La lectura del contrato usa el usuario y el mandante de la conexión — o la Credencial elegida en el asistente —, pero solo cuando la URL es el servidor de la conexión. Para otra dirección, la llamada sale sin autenticación y sin seguir redirecciones, para que nadie reciba el usuario de SAP escribiendo una dirección propia.
- El campo Contrato acepta también la URL del contrato (
.../PP_PRODOPS_CONFIRM_SRV/$metadata), que se descarga en el momento. Si no se puede descargar, el mensaje trae el estado que devolvió el servidor.
El sondeo y sus límites
Cuando no hay contrato, el CMS hace una petición real a la URL para ver qué vuelve. Eso es una llamada al sistema del cliente, así que está contenida:
- solo GET — nada que altere estado;
- 10 segundos de tiempo límite;
- 1 MB de respuesta, como máximo;
- 3 redirecciones, como máximo;
- las direcciones de metadatos de nube (el
169.254.169.254de AWS/Azure/GCP y equivalentes) están bloqueadas, para que una URL pegada por error no se convierta en lectura de credencial de instancia.
De dónde vino cada operación
Cada operación de la lista trae una etiqueta de procedencia, y es lo que separa lo que el CMS sabe de lo que supone:
| Etiqueta | Significa |
|---|---|
| CONTRATO | Vino del Swagger/OData/WSDL. Es información exacta |
| SONDEO | Vino de una respuesta real de la API |
| INFERIDO | Fue propuesto por la IA a partir del contexto |
Preste atención especial a las INFERIDO a la hora de revisar: son las que pueden estar plausibles
y equivocadas al mismo tiempo.
La lista de operaciones
Un Swagger de porte real trae cientos de operaciones. La lista está armada para eso:
- agrupada por escenario, con los grupos cerrados y un contador en cada uno;
- marcar / limpiar el grupo entero de una vez;
- filtro por dirección (Colecta o Entrega) y búsqueda por texto — buscar abre los grupos solo;
- detalle bajo demanda: campos obligatorios y ejemplo de cuerpo se buscan cuando usted hace clic en “ver detalle”, no para las 450 operaciones de una vez.
Revisión e instalación
Antes de grabar, la revisión muestra cada objeto con CREAR, ACTUALIZAR o PERSONALIZADO, y
permite renombrar cualquier sigla o señalar una Interface existente en lugar de la propuesta.
Probar las lecturas ahora ejecuta las Colectas elegidas contra la API, en la dirección y con los
Parámetros Fijos que tendrán, y muestra la respuesta de cada una. Las Entregas nunca se disparan
desde ahí — escribirían en el sistema de destino. Una lectura que depende de un campo del mensaje
(la llave de /OrdemSet('{{Aufnr}}')) solo se puede probar con un mensaje real.
La URL de la Aplicación. La Colecta llama a la dirección de la Aplicación más la ruta de la
operación. Si la Aplicación todavía no tiene URL, recibe la URL base confirmada en el asistente. Si
tiene solo el host, las Colectas llevan la ruta de la raíz del servicio
(/sap/opu/odata/sap/API_X_SRV/OrdemSet). Una URL en otro host no se cambia — es decisión de quien
registró la Aplicación (un proxy, otro ambiente) —, así que conviene revisar la ruta de las Colectas
después de instalar.
Después de instalar, el asistente muestra lo que se creó con enlace a cada pantalla — Interfaces, Colectas, Entregas y Errores de Negocio. Como todo nace desactivado, ese enlace es el próximo paso, no un detalle.
Autenticación
Si la API exige credencial, regístrela antes en Credenciales y elíjala en el asistente. El CMS
cubre Basic, Bearer, API Key, login con token y OAuth2 client credentials — este último con
renovación automática, scope y parámetros extra cuando el proveedor lo exige.
Un secreto nunca llega a la IA. Token, contraseña y clave de API son sustituidos por marcadores antes de que cualquier texto se envíe al modelo — incluso cuando aparecen dentro de un ejemplo de petición del propio contrato.