In diesem Artikel wird hauptsächlich die Methode von PHP vorgestellt, die die SOAP-Erweiterung zur Implementierung von WebService verwendet. Er analysiert die Prinzipien der SOAP-Erweiterung und verwandte Techniken zur Implementierung von WebService im Detail in Form von Beispielen. Freunde in Not können darauf verweisen. Ich hoffe, dass es für alle hilfreich ist.
Die Einzelheiten lauten wie folgt:
In letzter Zeit bezieht sich die Verbindung externer Schnittstellen auf WebService. Die meisten der gefundenen Artikel beziehen sich auf NuSOAP. eine sogenannte leistungsstarke Open-Source-Software, also einige Klassen. Die Umgebung, in der der Artikel geschrieben und beschrieben wird, ist PHP 4.3. Ich habe es zuerst versucht, aber es stellte sich heraus, dass die von NuSOAP bereitgestellte SoapClient-Klasse mit der SoapClient-Klasse in Konflikt steht, die über eine integrierte SOAP-Erweiterung in PHP 5 verfügt.
Obwohl NuSOAP angeblich in allen PHP-Umgebungen verwendet wird, wird es nicht von den Serversicherheitseinstellungen beeinflusst. Da ich jedoch viele Klassendateien referenzieren muss, halte ich es immer noch für besser, die in PHP 5 hinzugefügte integrierte SOAP-Erweiterung zu verwenden, sofern dies praktisch ist. Erfahren Sie zunächst etwas über SOAP:
1. Vergleich zwischen SOAP und XML-PRC
In den Anfängen der Entwicklung von Webdiensten erfolgte die erste große Verwendung von XML Formatierte Nachrichten wurden auf das XML-RPC-Protokoll angewendet, wobei RPC für Remote Procedure Call steht. Beim XML Remote Procedure Call (XML-RPC) sendet der Client eine bestimmte Nachricht, die den Namen, das Programm, das den Dienst ausführt, und die Eingabeparameter enthalten muss.
XML-RPC kann nur eine begrenzte Vielfalt an Datentypen und einige einfache Datenstrukturen verwenden. Die Leute dachten, dass dieses Protokoll nicht leistungsfähig genug sei, also erschien SOAP – seine ursprüngliche Definition war Simple Object Access Protocol. Danach wurde allen nach und nach klar, dass SOAP nicht einfach ist und keine objektorientierte Sprache erfordert. Daher verwenden die Leute jetzt einfach den Namen SOAP.
XML-RPC verfügt nur über einen einfachen Satz von Datentypen. Stattdessen definiert SOAP Datentypen durch Nutzung der kontinuierlichen Weiterentwicklung des XML-Schemas. Gleichzeitig kann SOAP auch XML-Namespaces nutzen, was für XML-RPC nicht erforderlich ist. Dies ermöglicht, dass der Anfang einer SOAP-Nachricht eine beliebige Art von XML-Namespace-Deklaration sein kann, was jedoch zu mehr Komplexität und Inkompatibilität zwischen Systemen führt.
Mit dem Erwachen der Computerindustrie entdeckten die Menschen das Geschäftspotenzial XML-basierter Webdienste, sodass Unternehmen begannen, kontinuierlich Ideen, Meinungen, Argumente und Standardisierungsversuche zu erforschen. Dem W3C gelang es einst, eine Leistungsausstellung unter dem Namen „Web Services Activities“ zu organisieren, zu der auch die XML Protocol Working Group (XML Protocol Working Group) gehörte, die tatsächlich SOAP erstellte. Die Zahl der Standardisierungsbemühungen im Zusammenhang mit Webdiensten, die in irgendeiner Weise mit SOAP in Zusammenhang stehen oder davon abhängig sind, hat sich in erstaunlichem Maße verdoppelt.
Ursprünglich wurde SOAP als Erweiterung von XML-RPC entwickelt. Sein Hauptaugenmerk liegt auf der Durchführung von Remote-Prozeduraufrufen über Methoden- und Variablennamen, die aus WSDL-Dateien abgerufen werden. Durch kontinuierliche Weiterentwicklung haben die Menschen nun mehr Möglichkeiten gefunden, SOAP als nur die „Datei“-Methode zu verwenden – im Wesentlichen die Verwendung eines SOAP-Umschlags zum Senden von XML-formatierten Dateien. Um SOAP zu beherrschen, ist es in jedem Fall von grundlegender Bedeutung, die Rolle von WSDL zu verstehen.
2. SOAP-Paketstrukturanalyse
SOAP-Nachricht wird als SOAP-Envelope bezeichnet, einschließlich SOAP-Header und SOAP-Body. Darunter kann der SOAP-Header problemlos verschiedene andere Nachrichten einfügen, um die Funktionen des Webdienstes zu erweitern, z. B. Sicherheit (Verwendung von Zertifikaten für den Zugriff auf den Webdienst), und der SOAP-Körper ist der spezifische Nachrichtentext, bei dem es sich um die Informationen nach Marshall handelt.
Wenn SOAP aufgerufen wird, sendet es eine HTTP-Post-Nachricht an eine URL (z. B. http://api.google.com/search/beta2) (gemäß der SOAP-Spezifikation können auch HTTP-Get-Nachrichten gesendet werden). unterstützt werden), wird der Name der aufrufenden Methode in der HTTP-Request-Header-SOAP-Aktion angegeben und der nächste Schritt ist der SOAP-Envelope. Der Server empfängt die Anfrage, führt die Berechnung durch, transformiert das zurückgegebene Ergebnis in XML und sendet es über HTTP an den Client zurück.
3. Einfaches SOAP-Beispiel
Für die SOAP-Entwicklung stehen im Allgemeinen drei Möglichkeiten zur Auswahl:
1), PEARs eigene SOAP-Erweiterung
2), PHPs eigene SOAP-Erweiterung;
3), NuSOAP (reines PHP).
PHP 5 fügt integrierte SOAP-Erweiterungen hinzu, die als Teil von PHP bereitgestellt werden, sodass keine separaten Pakete heruntergeladen, installiert und verwaltet werden müssen. Dies ist die erste SOAP-Implementierung, die in C statt für PHP geschrieben wurde, daher behauptet der Autor, sie sei deutlich schneller. Die entsprechende Dokumentation ist im Abschnitt „Funktionsreferenz“ des PHP-Handbuchs (php_soap.dll) enthalten.
Ein Beispiel für einen Client, der auf .NET WEB-Dienste zugreift:
< ? php $objSoapClient = new SoapClient("http://www.webservicemart.com/uszip.asmx?WSDL"); $param = array("ZipCode"=>'12209'); $out = $objSoapClient->ValidateZip($param); $data = $out->ValidateZipResult; echo $data; ?>
4. Beispiele
1) Verwenden Sie PHP, um eine SOAP zu erstellen service
soap_server.php erstellen (virtueller Pfad ist: http://localhost/php/soap/soap_server.php)
< ? php /** * A simple math utility class */ class math{ /** * Add two integers together * * @param integer $a The first integer of the addition * @param integer $b The second integer of the addition * @return integer The sum of the provided integers */ public function add($a, $b){ return $a + $b; } /** * Subtract two integers from each other * * @param integer $a The first integer of the subtraction * @param integer $b The second integer of the subtraction * @return integer The difference of the provided integers */ public function sub($a, $b){ return $a - $b; } /** * p two integers from each other * * @param integer $a The first integer of the subtraction * @param integer $b The second integer of the subtraction * @return double The difference of the provided integers */ public function p($a, $b){ if($b == 0){ throw new SoapFault(-1, "Cannot pide by zero!"); } return $a / $b; } } $server = new SoapServer('math.wsdl', array('soap_version'=>SOAP_1_2)); $server->setClass("math"); $server->handle(); ?>
Hinweis:
a), Mathe-Klasse Es handelt sich um einen Webservice, der bald veröffentlicht wird
b), $server->setClass, nicht $server->addClass.
2) Verwenden Sie den PHP-Client, um auf den neu erstellten SOAP-Dienst zuzugreifen.
< ? php // $client = new SoapClient('http://localhost/php/soap/math.wsdl'); $client = new SoapClient("http://localhost/php/soap/soap_server.php?WSDL"); try{ $result = $client->p(8, 2); // will cause a Soap Fault if pide by zero print "The answer is: $result"; }catch(SoapFault $e){ print "Sorry an error was caught executing your request: {$e->getMessage()}"; } ?>
Im Wesentlichen dient http://localhost/php/soap/soap_server.php?WSDL zum Zugriff auf die Kommentarzeile Daher muss diese WSDL-Datei im Voraus generiert werden. Für andere Sprachen wie Java kann es dynamisch generiert werden. Für die mit PHP gelieferte SOAP-Erweiterung muss diese WSDL-Datei vorab generiert werden.
可以用ZendStudio生成静态的WSDL文件,此时用到math类的phpdoc作为生成WSDL的元数据。用ZendStudio生成wsdl文件时,必须正确说明Web服务目标地址,片断如下:
... <service name="mathService"> <port binding="typens:mathBinding" name="mathPort"> <soap:address location="http://localhost/php/soap/soap_server.php"></soap:address> </port> </service> ...
注:调用PHP Webserver的方法必须传入命名参数。
相关推荐:
Das obige ist der detaillierte Inhalt vonPHP implementiert WebService über SOAP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!