MENU
    Работа с 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.
    Plain text

    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), чтобы задать свой вопрос или узнать, сталкивались ли другие с подобным вопросом!
    Plain text

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