Trabajar con API SOAP y XML
  • 31 Oct 2023
  • 3 Minutos para leer
  • Colaboradores

Trabajar con API SOAP y XML


Article Summary

Visión general

Una guía con consejos y trucos para trabajar con APIs basadas en XML

Tulip Connectors puede utilizarse para interactuar con muchos tipos de fuentes de datos externas. Este artículo se centra en las API HTTP que intercambian información utilizando XML. Esta categoría incluye las API SOAP.

Envío de datos XML en Tulip

Para enviar contenido XML en el cuerpo de una petición, utiliza la notación $value$ para indicar que se debe insertar un parámetro.

Por ejemplo, con lo siguiente en el campo Request Body:


 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  

 xmlns:mes="http://mes.myexample.com"  

 xmlns:get="http://getInfo.mes.myexample.com" 



> 
>   
> 
>   
> 
>   
> 
>   
> 
> $entrada1$  
> 
> $entrada2$  
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


y los valores `input1` y `input2` como entradas a la Connector Function, se realiza una petición con los valores de `input1` y `input2` sustituidos en el Request Body.


Esto se muestra en la siguiente interfaz de Tulip Connector Function:


![Working with SOAP and XML APIs_229803470.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229803470.png){height="" width=""}


## Análisis de datos XML en Tulip


### Un ejemplo sencillo de API


Empecemos con un simple ejemplo de respuesta de una API XML.


xml version="1.0" encoding="UTF-8"?

Italiano cotidiano

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

Aprender XML

Erik T. Ray

2003

39.95



Los siguientes ejemplos muestran cómo acceder a las distintas piezas de información dentro de Tulip.


Un extractor de:


`/librería/libro[1]/título`


devuelve:


`<title lang="es">El italiano de todos los días</title>`


Tenga en cuenta que las matrices en XML están "1-indexadas", lo que significa que el primer elemento está en la posición "1", a diferencia de {{glossary.JSON}}-query que está "0-indexada".


Un extractor de:


`/librería/libro[1]/título/texto()`


devuelve:


`Italiano cotidiano`


Observe que la función `/text` () se utiliza para extraer el valor del texto contenido en el nodo seleccionado.


Un extractor de:


`/librería/libro[@category="niños"][1]/título/texto()`


devuelve:


`Harry Potter`


Observe que el selector nos ha permitido buscar dentro de las propiedades de un nodo.


Estos ejemplos se pueden utilizar directamente en Tulip como se muestra a continuación:


![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229776239.png)


### Un ejemplo de API SOAP


Examinemos ahora un caso más complejo con namespaces, una característica típica de las APIs SOAP.


``` <soap:Envelope  

 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"  

 xmlns:xsd="http://www.w3.org/2001/XMLSchema"  

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 



> 
>   
> 
>   
> 
>   
> 
>   
> 
>  0  
> 
>   
> 
>   
> 
>  información recuperada con éxito  
> 
>   
> 
>   
> 
>   
> 
> Mi operación  
> 
> Ninguna  
> 
> 1234567-890  
> 
> B  
> 
>   
> 
>   
> 
>   
> 
> Número de pieza  
> 
> 1234567-890  
> 
>   
> 
>   
> 
> RevisiónPieza  
> 
> B  
> 
>   
> 
>   
> 
> DescripciónPieza  
> 
> Mi pieza de ejemplo  
> 
>   
> 
>   
> 
>   
> 
> Normal  
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


Esta respuesta utiliza espacios de nombres XML, que añaden complejidad. Para la mayoría de los casos, una búsqueda global utilizando los operadores `//*` y `.//*` hace que la extracción sea muy sencilla.


Un extractor de:


`//*[nombre-local()="nombre-de-la-propiedad"][1]/texto()`


devuelve:


`NúmeroPieza`


Tenga en cuenta que las matrices en XML están "1-indexadas", lo que significa que el primer elemento está en la posición "1", a diferencia de json-query que está "0-indexado".


Un extractor de:


`//*[local-name()="Propiedad"]`


devuelve:


`<Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>Número de pieza</propertyName> <propertyValue>1234567-890</propertyValue> </Property> <Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>PartRevision</propertyName> <propertyValue>B</propertyValue> </Property> <Property xmlns="http://getInfo.mes.miejemplo.com"> <propertyName>DescripciónDeParte</propertyName> <propertyValue>Mi parte de ejemplo</propertyValue> </Property>.`


Observe aquí que los espacios de nombres se "bajan" a este resultado. Por lo tanto, una subconsulta seguiría buscando en el espacio de nombres global.


Para extraer un Array de Objetos, utilice la búsqueda global mostrada en el ejemplo anterior para extraer el array, y luego un extractor de búsqueda local de:


`.//*[nombre-local()="nombre-de-la-propiedad"]/texto()`


para recuperar un array de objetos de la forma:


`[ { "Nombre": "NúmeroPieza" 
 "Valor": "1234567-890" }, { "Name": "PartRevision" 
 "Value": "B" 
 }, { "Nombre": "PartDescription" 
 "Valor": "Mi parte de ejemplo" 
 } 
]`


Estos ejemplos se muestran en la interfaz de conectores Tulip más abajo:


![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/Working%20with%20SOAP%20and%20XML%20APIs_229781522.png)




---


¿Has encontrado lo que buscabas?


También puedes dirigirte a [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) para publicar tu pregunta o ver si otros se han enfrentado a una pregunta similar.


¿Te ha sido útil este artículo?