PHP implementiert WebService über SOAP

*文
Freigeben: 2023-03-18 19:18:02
Original
2291 Leute haben es durchsucht

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"=>&#39;12209&#39;); 
$out = $objSoapClient->ValidateZip($param);
$data = $out->ValidateZipResult;
echo $data;
?>
Nach dem Login kopieren

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(&#39;math.wsdl&#39;, array(&#39;soap_version&#39;=>SOAP_1_2));
$server->setClass("math");
$server->handle(); 
?>
Nach dem Login kopieren

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(&#39;http://localhost/php/soap/math.wsdl&#39;);
$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()}";
}
?>
Nach dem Login kopieren

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>
...
Nach dem Login kopieren

注:调用PHP Webserver的方法必须传入命名参数。

相关推荐:

如何使用php websocket创建简单聊天室

PHP Web实时消息后台服务器推送技术GoEasy

详谈PHP WEB服务器相关知识_PHP教程

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!