Trabalho com APIs SOAP e XML
  • 31 Oct 2023
  • 3 Minutos para Ler
  • Contribuintes

Trabalho com APIs SOAP e XML


Article Summary

Visão geral

Um guia com dicas e truques para trabalhar com APIs baseadas em XML

Os Tulip Connectors podem ser usados para interagir com muitos tipos de fontes de dados externas. Este artigo se concentra em APIs HTTP que trocam informações usando XML. Essa categoria inclui APIs SOAP.

Envio de dados XML no Tulip

Para enviar conteúdo XML no corpo de uma solicitação, use a notação $value$ para mostrar que um parâmetro deve ser inserido.

Por exemplo, com o seguinte no campo Request Body:


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

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

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



> 
>   
> 
>   
> 
>   
> 
>   
> 
> $input1$  
> 
> $input2$  
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


e os valores `input1` e `input2` como entradas para a Connector Function, uma solicitação é feita com os valores de `input1` e `input2` substituídos no Request Body.


Isso é mostrado na interface da Tulip Connector Function abaixo:


![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=""}


## Analisando dados XML no Tulip


### Um exemplo simples de API


Vamos começar com um exemplo simples de resposta de uma API XML.


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

Italiano do cotidiano

Giada De Laurentiis

2005

30.00

Harry Potter

J. K. Rowling

2005

29.99

Aprendendo XML

Erik T. Ray

2003

39.95



Os exemplos a seguir mostram como acessar as várias informações no Tulip.


Um extrator de:


`/bookstore/book[1]/title`


retorna:


`<title lang="en">Everyday Italian</title>`


Observe que as matrizes em XML são "1-indexadas", o que significa que o primeiro elemento está na posição "1", ao contrário da {{glossary.JSON}}-query, que é "0-indexada".


Um extrator de:


`/bookstore/book[1]/title/text()`


retorna:


`Everyday Italian`


Observe que a função `/text()` é usada para extrair o valor do texto contido no nó selecionado.


Um extrator de:


`/bookstore/book[@category="children"][1]/title/text()`


retorna:


`Harry Potter`


Observe que o seletor nos permitiu pesquisar nas propriedades de um nó.


Esses exemplos podem ser usados diretamente no Tulip, conforme mostrado abaixo:


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


### Um exemplo de API SOAP


Agora vamos examinar um caso mais complexo com namespaces, um recurso típico das 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  
> 
>   
> 
>   
> 
>  informações recuperadas com sucesso  
> 
>   
> 
>   
> 
>   
> 
> Minha operação  
> 
> Nenhuma  
> 
> 1234567-890  
> 
> B  
> 
>   
> 
>   
> 
>   
> 
> Número da peça  
> 
> 1234567-890  
> 
>   
> 
>   
> 
> Revisão da peça  
> 
> B  
> 
>   
> 
>   
> 
> Descrição da peça  
> 
> Minha peça de exemplo  
> 
>   
> 
>   
> 
>   
> 
> Normal  
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


Essa resposta usa Namespaces XML, o que aumenta a complexidade. Na maioria dos casos, uma pesquisa global usando os operadores `//*` e `.//*` torna a extração muito simples.


Um extrator de:


`//*[local-name()="propertyName"][1]/text()`


retorna:


`PartNumber`


Observe que as matrizes em XML são "indexadas em 1", o que significa que o primeiro elemento está na posição "1", ao contrário da consulta json, que é "indexada em 0".


Um extrator de:


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


retorna:


`<Property xmlns="http://getInfo.mes.myexample.com"> <propertyName>PartNumber</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.myexample.com"> <propertyName>PartDescription</propertyName> <propertyValue>Minha parte de exemplo</propertyValue> </Property>`


Observe aqui que os namespaces são "trazidos" para esse resultado. Portanto, uma subconsulta ainda pesquisaria o namespace global.


Para extrair uma matriz de objetos, use a pesquisa global mostrada no exemplo anterior para extrair a matriz e, em seguida, um extrator de pesquisa local de:


`.//*[local-name()="propertyName"]/text()`


para recuperar uma matriz de objetos do tipo:


`[ { "Name": "PartNumber" 
 "Value": "1234567-890" }, { "Name": "PartRevision" 
 "Value" (Valor): "B" 
 }, { "Name": "PartDescription" 
 "Value" (Valor): "My example part" 
 } 
]`


Esses exemplos são mostrados na interface de conectores da Tulip abaixo:


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




---


Encontrou o que estava procurando?


Você também pode acessar [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) para postar sua pergunta ou ver se outras pessoas tiveram uma pergunta semelhante!


Este artigo foi útil?