2016-12-27 6 views
0

Mir ist gerade klar geworden, dass ich in naher Zukunft mit einer SOAP API interagieren muss. Bis jetzt habe ich nur REST-APIs und niemals eine SOAP-API verwendet.Wie stelle ich eine Verbindung zum folgenden SOAP-Beispieldienst in PHP her und fordere diesen an?

Ich habe über SOAP-APIs zu lesen und so weit mein (sehr wahrscheinlich falsch) Verständnis ist wie folgt:

  • Sie zuerst an den SOAP-Dienst verbinden. Wenn Sie eine Verbindung herstellen, geben Sie die URL der WSDL-Datei ein, die Ihnen dann mitteilt, welche "Dienste" (hier verwende ich den richtigen Begriff?) Über die SOAP-API verfügbar sind.
  • Sobald Sie wissen, welchen Dienst Sie aufrufen möchten, rufen Sie den Dienst mit den erforderlichen Parametern auf und senden eine XML-Anforderung an den SOAP-Server, auf der er eine XML-Antwort zurücksendet.

Ich habe zwei Fragen:

  1. Ist mein Verständnis von SOAP oben ist auch richtig zu beginnen?
  2. Wie verwende ich PHP auf die folgende Beispiel für eine SOAP-API zu verbinden und Anfragen zu stellen: http://www.webservicex.com/globalweather.asmx?op=GetWeather

(Wenn die Probe SOAP API oben verlinkten nicht sehr gut ist, dann bin ich offen zu lernen, wie SOAP mit anderen Beispiel für eine SOAP-APIs zu verwenden, die verfügbar sind)


bearbeiten. pawelwaw, schrieb ich den folgenden Beispielcode alles aus zu testen, aber es scheint so, egal, welchen Wert ich für CityName verwenden in der GetWeather Operation bekomme ich keine Daten zurück. Ist mein Verständnis falsch oder ist die SOAP-API einfach nicht sehr gut?

<?php 

    $client = new SoapClient('http://www.webservicex.com/globalweather.asmx?wsdl'); 

    echo '<h2>Types:</h2>'; 
    echo '<pre>'; 
    var_dump($client->__getTypes()); 
    echo '</pre>'; 

    echo '<h2>Functions:</h2>'; 
    echo '<pre>'; 
    var_dump($client->__getFunctions()); 
    echo '</pre>'; 

    echo '<h2>GetCitiesByCountry:</h2>'; 
    echo '<pre>'; 
    echo htmlentities($client->GetCitiesByCountry([ 
     'CountryName' => 'Poland' 
    ])->GetCitiesByCountryResult); 
    echo '</pre>'; 

    echo '<h2>GetWeather:</h2>'; 
    echo '<pre>'; 
    var_dump($client->GetWeather([ 
     'CityName' => 'Krakow', 
     'CountryName' => 'Poland' 
    ])); 
    echo '</pre>'; 

Antwort

1

Ich verwende normalerweise SOAP API. Und für diesen Dienst Sie diesen Beispielcode verwenden können Städte von Land zu bekommen

<?php 
    $api = new SoapClient ('http://www.webservicex.com/globalweather.asmx?WSDL'); 
    $res = $api->GetCitiesByCountry(array('CountryName' =>"Poland")); 

    var_dump($res); 
?> 

dann können Sie zweites Verfahren dieser api bekommen Wetter http://www.webservicex.com/globalweather.asmx?op=GetWeather

Ich hoffe, es hilft laufen.

Es scheint, dass Funktion GetWeather (http://www.webservicex.com/globalweather.asmx?op=GetWeather) nicht korrekt funktioniert. Wenn ich manuell Werte vor Ort füllte, gibt es keine Antwort mit Daten, aber für die Funktion GetCitiesByCountry (http://www.webservicex.com/globalweather.asmx?op=GetCitiesByCountry) gibt Daten zurück. Ich hatte nicht viele Erfahrungen mit API, aber das sollte funktionieren, meiner Meinung nach gibt es ein Problem mit dieser Funktion in SOAP, weil nicht über http auch funktionieren. Ich habe es über REST getestet, und diese Funktion funktioniert nicht entsprechend der Spezifikation.

+0

pawelwaw, vielen Dank für die Antwort. Es macht viel Sinn. Bitte beachten Sie die Bearbeitung in meiner Frage für eine zusätzliche Frage. Vielen Dank. – HartleySan

+0

Es scheint, dass Funktion GetWeather nicht funktioniert. Sie können eine dieser Apis verwenden, einige von ihnen sind kostenlos https://superdevresources.com/weather-forecast-api-for-developing-apps/ – pawelwaw

+0

Vielen Dank für die Bestätigung. Ich wollte nur sicherstellen, dass ich verstanden habe, wie man einen SOAP-Service in PHP richtig benutzt und dass die API selbst kaputt war (und nicht mein Verständnis). – HartleySan

Verwandte Themen