Travailler avec des API SOAP et XML
  • 31 Oct 2023
  • 3 Minutes à lire
  • Contributeurs

Travailler avec des API SOAP et XML


Résumé de l’article

Vue d'ensemble

Un guide avec des conseils et des astuces pour travailler avec des API basées sur XML

Lesconnecteurs Tulip peuvent être utilisés pour interagir avec de nombreux types de sources de données externes. Cet article se concentre sur les API HTTP qui échangent des informations en utilisant XML. Cette catégorie inclut les API SOAP.

Envoi de données XML dans Tulip

Pour envoyer un contenu XML dans le corps d'une requête, utilisez la notation $value$ pour indiquer qu'un paramètre doit être inséré.

Par exemple, avec ce qui suit dans le champ "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$  
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


et les valeurs `input1` et `input2` comme entrées de la fonction connecteur, une requête est faite avec les valeurs `input1` et `input2` substituées dans le corps de la requête.


Ceci est illustré dans l'interface de la Fonction Connecteur de Tulip ci-dessous :


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


## Analyse des données XML dans Tulip


### Un exemple simple d'API


Commençons par un exemple simple de réponse d'une API XML.


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

L'italien au quotidien

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

Apprendre XML

Erik T. Ray

2003

39.95



Les exemples suivants montrent comment accéder aux différents éléments d'information de Tulip.


Un extracteur de :


`/bookstore/book[1]/titre`


renvoie :


`<title lang="en">Italien au quotidien</title>`


Notez que les tableaux en XML sont "1-indexés", ce qui signifie que le premier élément est en position "1", contrairement à {{glossary.JSON}}-requête qui est "0-indexé".


Un extracteur de :


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


renvoie :


`Italien de tous les jours`


Notez que la fonction `/text()` est utilisée pour extraire la valeur textuelle contenue dans le noeud sélectionné.


Un extracteur de :


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


renvoie :


`Harry Potter`


Notez que le sélecteur nous a permis de rechercher dans les propriétés d'un nœud.


Ces exemples peuvent être directement utilisés dans Tulip comme indiqué ci-dessous :


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


### Un exemple d'API SOAP


Examinons maintenant un cas plus complexe avec les espaces de noms, une caractéristique typique des API 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  
> 
>   
> 
>   
> 
>  info récupérée avec succès  
> 
>   
> 
>   
> 
>   
> 
> Mon opération  
> 
> Aucune  
> 
> 1234567-890  
> 
> B  
> 
>   
> 
>   
> 
>   
> 
> Numéro de pièce  
> 
> 1234567-890  
> 
>   
> 
>   
> 
> Révision de la pièce  
> 
> B  
> 
>   
> 
>   
> 
> PartDescription  
> 
> Mon exemple de pièce  
> 
>   
> 
>   
> 
>   
> 
> Normal  
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


Cette réponse utilise des espaces de nommage XML, qui ajoutent de la complexité. Dans la plupart des cas, une recherche globale utilisant les opérateurs `//*` et `.//*` rend l'extraction très simple.


Un extracteur de :


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


renvoie :


`NuméroPièce`


Notez que les tableaux en XML sont "1-indexés", ce qui signifie que le premier élément est en position "1", contrairement à json-query qui est "0-indexé".


Un extracteur de :


`//*[nom-local()="Propriété"]`


renvoie :


`<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>My example part</propertyValue> </Property>`


Notez ici que les espaces de noms sont "ramenés" dans ce résultat. Par conséquent, une sous-requête chercherait toujours dans l'espace de noms global.


Pour extraire un tableau d'objets, utilisez la recherche globale présentée dans l'exemple précédent pour extraire le tableau, puis un extracteur de recherche locale de :


`.//*[nom-local()="nom-de-propriété"]/texte()`


pour extraire un tableau d'objets de la forme :


`[ { "Name" : "PartNumber" 
 "Value" : "1234567-890" }, { "Name" : "PartRevision" 
 "Value" : "B" 
 }, { "Name" : "PartDescription" 
 "Value" : "Mon exemple de pièce" 
 } 
]`


Ces exemples sont présentés dans l'interface des connecteurs Tulip ci-dessous :


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




---


Avez-vous trouvé ce que vous cherchiez ?


Vous pouvez également vous rendre sur [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) pour poser votre question ou voir si d'autres ont rencontré une question similaire !


Cet article vous a-t-il été utile ?