Ich habe dieses Problem in der Vergangenheit auch aufgetreten. Es ist besonders schwierig für Entwickler mit Erfahrung, meist REST-konforme APIs zu verwenden, um die Grundlagen von SOAP in einer vernünftigen Menge an Zeit zu finden, geschweige denn in der Lage zu sein, Probleme darin zu debuggen. Zu beachten ist, dass SOAP genau das gleiche Application-Layer-Protokoll (HTTP) verwendet wie die REST-APIs, mit denen Sie wahrscheinlich vertraut sind. Es wird Header geben, ein uri, eine Methode genau wie das, was Sie gewohnt sind, das einzige, was speziell ist die Art, wie Sie diese Felder formatieren.
Nachdem ich dies realisiert hatte, war die Lösung, die ich schließlich hatte, die wenigen SOAP-Anfragen zu generieren (ich denke, es waren zwei). Ich brauchte ein SOAP-Tool wie SoapUI und schickte dann diese generierten Anfragen einfach unter non-SOAP HTTP request library for node.
Hier ist ein Beispiel, das für mich konsequent gearbeitet:
// SOAP
var requestBody =
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ><soap:Header>' +
'<SOAPAction>addRoom' +
'</SOAPAction></soap:Header><soap:Body><AddRoomRequest ' +
'xmlns="http://portal.vidyo.com/admin/v1_1"><room><name>' +
params.conferenceName + '</name><RoomType>Public</RoomType><ownerName>' +
vidyoApiUsername + '</ownerName>' + '<extension>' +
params.conferenceExtension +
'</extension><groupName>Default</groupName><RoomMode><isLocked>' +
'false</isLocked><hasPIN>false</hasPIN><hasModeratorPIN>false' +
'</hasModeratorPIN></RoomMode></room></AddRoomRequest></soap:Body>' +
'</soap:Envelope>';
var requestHeaders = {
'cache-control': 'no-cache',
'soapaction': 'addRoom',
'content-type': 'text/xml;charset=UTF-8'
};
var requestOptions = {
'method': 'POST',
'url': vidyoApiEndpoint,
'qs': { 'wsdl': ''},
'headers': requestHeaders,
'body': requestBody,
'timeout': 5000
};
request(requestOptions, function (error, response, body) {
if (error) {
// handle error
} else {
try {
var parsingOptions = {
'object': true,
'sanitize': false
};
var jsonResult = parser.toJson(body, parsingOptions); // from xml
if(jsonResult['soapenv:Envelope']
['soapenv:Body']
['ns1:AddRoomResponse']
['ns1:OK'] === 'OK') {
conferenceInfo(req, res, next, params);
} else {
// handle error
}
} catch (e) {
// handle error
}
}
}).auth(vidyoApiUsername, vidyoApiPassword);
// you can remove this .auth if your api has no authentication
UPDATE: Unterm Strich ist, dass dies ein Problem umgehen, die zu einem Anfänger erklären hilft, wie SOAP-Werke im Vergleich zu anderen Anfragen. Dies ist keine Empfehlung als Best Practice, sondern eine Information, die einem Entwickler helfen kann, das Problem zu verstehen.
Brilliant. Danke dafür! –
Das ist perfekt. Du Zauberer. – AlexMcG