Работа с SOAP и XML API
  • 31 Oct 2023
  • 2 Минуты для чтения
  • Авторы

Работа с SOAP и XML API


Вводный текст

Обзор

Руководство с советами и рекомендациями по работе с API на основе XML

Коннекторы Tulip Connectors могут использоваться для взаимодействия со многими типами внешних источников данных. Данная статья посвящена HTTP API, которые обмениваются информацией с использованием XML. В эту категорию входят и SOAP API.

Отправка XML-данных в Tulip

Для отправки XML-содержимого в теле запроса используйте нотацию $value$, чтобы показать, что необходимо вставить параметр.

Например, в поле 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$  
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


и значения `input1` и `input2` в качестве входных данных для функции-коннектора, формируется запрос с подставленными в тело запроса значениями `input1` и `input2`.


Это показано в интерфейсе 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=""}


## Разбор XML-данных в Tulip


### Простой пример API


Начнем с простого примера ответа от XML API.


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

Повседневная итальянская кухня

Джада Де Лаурентис

2005

30.00

Гарри Поттер

Дж. К. Роулинг

2005

29.99

Изучаем XML

Эрик Т. Рэй

2003

39.95



Следующие примеры показывают, как получить доступ к различным частям информации в Tulip.


Извлекатель из:


`/bookstore/book[1]/title`


возвращает:


`<title lang="en">Повседневный итальянский</title>.`


Обратите внимание, что массивы в XML "1-индексированы", т.е. первый элемент находится в позиции "1", в отличие от {{glossary.JSON}}-запроса, который "0-индексирован".


Экстрактор из:


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


возвращает:


`Everyday Italian`


Обратите внимание, что функция `/text()` используется для извлечения текстового значения, содержащегося в выбранном узле.


Экстрактор из:


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


возвращает:


`Гарри Поттер`


Обратите внимание, что селектор позволил нам осуществлять поиск внутри свойств узла.


Эти примеры могут быть непосредственно использованы в Tulip, как показано ниже:


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


### Пример SOAP API


Теперь рассмотрим более сложный случай с использованием пространств имен, характерных для SOAP API.


``` <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  
> 
>   
> 
>   
> 
>  информация получена успешно  
> 
>   
> 
>   
> 
>   
> 
> Моя операция  
> 
> Нет  
> 
> 1234567-890  
> 
> B  
> 
>   
> 
>   
> 
>   
> 
> PartNumber  
> 
> 1234567-890  
> 
>   
> 
>   
> 
> PartRevision  
> 
> B  
> 
>   
> 
>   
> 
> PartDescription  
> 
> Мой пример детали  
> 
>   
> 
>   
> 
>   
> 
> Обычный  
> 
>   
> 
>   
> 
>   
> 
>   
> 
>   
> 
> 
> ```
> 
> 
> 


В этом ответе используются пространства имен XML, что создает дополнительные сложности. В большинстве случаев глобальный поиск с использованием операторов `//*` и `.//*` делает извлечение очень простым.


Экстрактор из:


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


возвращает:


`PartNumber .`


Обратите внимание, что массивы в XML "1-индексированы", т.е. первый элемент находится в позиции "1", в отличие от json-запроса, который "0-индексирован".


Экстрактор из:


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


возвращает:


`<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>Мой пример части</propertyValue> </Property>`


Обратите внимание, что пространства имен "спускаются" в этот результат. Поэтому в подзапросе все равно будет выполняться поиск в глобальном пространстве имен.


Чтобы извлечь массив объектов, используйте глобальный поиск, показанный в предыдущем примере, для извлечения массива, а затем экстрактор локального поиска вида:


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


для получения массива объектов вида:


`[ { "Name": "PartNumber" 
 "Value": "1234567-890" }, { "Name": "PartRevision" 
 "Value": "B" 
 }, { "Name": "PartDescription". 
 "Value": "Мой пример части" 
 } 
]`


Эти примеры показаны в интерфейсе Tulip Connectors ниже:


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




---


Вы нашли то, что искали?


Вы также можете зайти на [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all), чтобы задать свой вопрос или узнать, сталкивались ли другие с подобным вопросом!


Была ли эта статья полезной?