Связь с SOAP API с помощью Node.JS - PullRequest
0 голосов
/ 11 июня 2018

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

Я создал приложение Angular 5 с промежуточным программным обеспечением Express и узлом NodeСервер .js для связи с REST API.Тем не менее, теперь я должен получить некоторые данные из другого источника, общаясь через SOAP.У меня есть запрос и тело, похожее на это:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDashboardInfo xmlns ="http://IAmAURL.com/client">
<username>ThisIsNotTheRealUser</username>
<password>ThisIsNotTheRealPassword</password>
<applicationIdentifier>Identifier.827</applicationIdentifier>
<deviceIdentifier>DataTest</deviceIdentifier>
</GetDashboardInfo>
</soap:Body>
</soap:Envelope>

С POST для клиента: https://server.someplace.com/MobileClient.asmx

Я знаю, что запрос возвращает данные, которые я хочу при использовании PostMan какнапример: working SOAP request

Какими способами можно обычно передавать такой запрос SOAP с помощью Node?

1 Ответ

0 голосов
/ 11 июня 2018

Хорошо!Я понял.После некоторого времени тестирования оказывается, что вызовы SOAP не слишком сложны.Для моего конкретного сценария код Node js выглядит следующим образом:

var request = require("request");

var options = { method: 'POST',
  url: 'https://server.someplace.com/MobileClient.asmx',
  headers: 
   { 'Cache-Control': 'no-cache',
     'Content-Type': 'text/xml' },
  body: '<?xml version="1.0" encoding="utf-8"?>\r\n<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r\n<soap:Body>\r\n<GetDashboardInfo xmlns ="http://IAmAURL.com/client">\r\n<username>ThisIsNotTheRealUser</username>\r\n<password>ThisIsNotTheRealPassword</password>\r\n<applicationIdentifier>Identifier.827</applicationIdentifier>\r\n<deviceIdentifier>DataTest</deviceIdentifier>\r\n</GetDashboardInfo>\r\n</soap:Body>\r\n</soap:Envelope>' };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

Я постараюсь объяснить это как можно более подробно, пожалуйста, исправьте меня, если я ошибаюсь:

Aздесь мало что происходитЗапрос - это зависимость для узла, которая упрощает вызовы http.В объекте параметров мы определяем метод, который, как я понимаю, всегда POST для вызовов SOAP.URL-адрес - это адрес, по которому вы направляете запрос.Тело - это часть вашего SOAP-запроса, содержащая функции / методы и схемы XML, которые будут использоваться для форматирования ваших данных.Функции зависят от используемого вами API-интерфейса, поэтому уточните, с кем вы извлекаете данные, какие методы они предлагают для предоставления вам данных, которые вам конкретно нужны.Тело также содержит аутентификацию, необходимую для доступа к моей службе мыла.Наконец, я записываю результат (тело) в консоль, которая возвращает все данные, отформатированные в XML.

Отлично!Что теперь?Что ж, теперь мне нужно отформатировать XML в объекты JSON, которые я действительно могу использовать.Для этого я, вероятно, буду использовать пакет узлов xml2json, но это отдельная проблема.

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...