Maison > développement back-end > tutoriel php > Comment implémenter WebService à l'aide de l'extension SOAP en PHP

Comment implémenter WebService à l'aide de l'extension SOAP en PHP

高洛峰
Libérer: 2023-03-05 10:10:01
original
1271 Les gens l'ont consulté

L'exemple de cet article décrit comment PHP utilise l'extension SOAP pour implémenter WebService. Je le partage avec vous pour votre référence. Les détails sont les suivants :

Récemment, dans un projet PHP, la connexion d'interfaces externes implique WebService. Il n'y a pas beaucoup d'articles connexes sur les moteurs de recherche. à NuSOAP, un logiciel open source réputé très puissant (adresse de téléchargement : http://sourceforge.net/projects/nusoap/), c'est-à-dire quelques classes. L'environnement décrit dans l'article est PHP 4.3. De nos jours, PHP 5.2 ou PHP 5.3 est populaire. Je l'ai d'abord essayé et je l'ai mal exécuté. Il s'avère que la classe soapclient fournie par NuSOAP est en conflit avec la nouvelle classe SoapClient d'extension SOAP intégrée dans PHP 5.

Bien que NuSOAP prétende être utilisé dans tous les environnements PHP, il n'est pas affecté par les paramètres de sécurité du serveur. Cependant, comme de nombreux fichiers de classe doivent être référencés, je pense toujours qu'il serait préférable d'utiliser l'extension SOAP intégrée ajoutée à PHP 5, à condition que cela soit pratique. Tout d'abord, découvrez SOAP :

1. Comparaison entre SOAP et XML-PRC

Au début du développement des services Web, la première utilisation majeure des messages au format XML était de s'appliquer à le protocole XML-RPC, où RPC signifie appel de procédure distante. Dans XML Remote Procedure Call (XML-RPC), le client envoie un message spécifique qui doit inclure le nom, le programme exécutant le service et les paramètres d'entrée.

XML-RPC ne peut utiliser qu'une variété limitée de types de données et quelques structures de données simples. Les gens pensaient que ce protocole n'était pas assez puissant, c'est pourquoi SOAP est apparu - sa définition originale était Simple Object Access Protocol. Après cela, tout le monde s'est progressivement rendu compte que SOAP n'est pas simple et qu'il ne nécessite pas l'utilisation d'un langage orienté objet, alors maintenant les gens utilisent simplement le nom SOAP.

XML-RPC ne dispose que d'un simple ensemble de types de données. Au lieu de cela, SOAP définit les types de données en tirant parti de l'évolution continue du schéma XML. Dans le même temps, SOAP peut également utiliser des espaces de noms XML, ce qui n'est pas requis par XML-RPC. Cela permet au début d'un message SOAP d'être n'importe quel type de déclaration d'espace de noms XML, au prix d'une complexité et d'une incompatibilité supplémentaires entre les systèmes.

Avec l'éveil de l'industrie informatique, les gens ont découvert le potentiel commercial des services Web basés sur XML, de sorte que les entreprises ont commencé à explorer continuellement des idées, des opinions, des arguments et des tentatives de standardisation. Le W3C a déjà tenté d'organiser une exposition de réalisations sous le nom de « Activités de services Web », qui comprenait également le groupe de travail sur le protocole XML (groupe de travail sur le protocole XML) qui a effectivement créé SOAP. Le nombre d'efforts de normalisation liés aux services Web qui sont d'une manière ou d'une autre liés ou dépendants de SOAP a doublé à un degré étonnant.

À l'origine, SOAP a été développé comme une extension de XML-RPC. Son objectif principal est d'effectuer des appels de procédures à distance via des noms de méthodes et de variables obtenus à partir de fichiers WSDL. Aujourd'hui, grâce à des progrès continus, les gens ont trouvé plus de façons d'utiliser SOAP que la simple méthode "fichier" - en utilisant essentiellement une enveloppe SOAP pour envoyer des fichiers au format XML. Dans tous les cas, pour maîtriser SOAP, il est fondamental de comprendre le rôle joué par WSDL.

2. Analyse de la structure des paquets SOAP

Le message SOAP est appelé une enveloppe SOAP, comprenant l'en-tête SOAP et le corps SOAP. Parmi eux, l'en-tête SOAP peut facilement insérer divers autres messages pour étendre les fonctions du service Web, telles que la sécurité (en utilisant des certificats pour accéder au service Web), et le corps SOAP est le texte du message spécifique, qui correspond aux informations après Marshall.

Lors de l'appel de SOAP, il envoie un message HTTP Post à une URL (telle que http://api.google.com/search/beta2) (selon la spécification SOAP, les messages HTTP Get peuvent également être pris en charge ), le nom de la méthode appelante est donné dans l'action SOAP de l'en-tête de requête HTTP, et l'étape suivante est l'enveloppe SOAP. Le serveur reçoit la requête, effectue le calcul, transforme le résultat renvoyé en XML et le renvoie au client via HTTP.

3. Exemple SOAP simple

Il existe généralement trois façons de choisir pour le développement SOAP :

1), la propre extension SOAP de PEAR
2), celle de PHP ; propre extension SOAP ;
3), NuSOAP (PHP pur).

PHP 5 ajoute des extensions SOAP intégrées, qui sont fournies dans le cadre de PHP, il n'est donc pas nécessaire de télécharger, d'installer et de gérer des packages séparés. Il s'agit de la première implémentation SOAP écrite en C au lieu de PHP pour PHP, l'auteur affirme donc qu'elle est nettement plus rapide. La documentation pertinente est incluse dans la section Référence des fonctions du manuel PHP (php_soap.dll).

Un exemple de client qui accède aux services WEB .NET :

< ? 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;
?>
Copier après la connexion

Exemples

1) Utiliser PHP pour créer un SOAP. service

Créer soap_server.php (le chemin virtuel est : 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;
  }
  /**
  * Div 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 div($a, $b){
    if($b == 0){
      throw new SoapFault(-1, "Cannot divide 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();
?>
Copier après la connexion

Remarque :

a), le cours de mathématiques est un service Web qui sera bientôt rendu public
b), $server->setClass, pas $server->addClass ;
2) Utilisez le client PHP pour accéder au service SOAP nouvellement créé

< ? 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->div(8, 2); // will cause a Soap Fault if divide by zero
  print "The answer is: $result";
}catch(SoapFault $e){
  print "Sorry an error was caught executing your request: {$e->getMessage()}";
}
?>
Copier après la connexion

Essentiellement, http://localhost/php/soap/soap_server.php?WSDL permet d'accéder au fichier de description wsdl pointé par la ligne de commentaire, ce fichier WSDL doit donc être généré au préalable. Pour d'autres langages comme Java, il peut être généré dynamiquement. Pour l'extension SOAP fournie avec PHP, ce fichier WSDL doit être généré au préalable.

Vous pouvez utiliser ZendStudio pour générer des fichiers WSDL statiques. À l'heure actuelle, le phpdoc de la classe mathématique est utilisé comme métadonnées pour générer du WSDL. Lorsque vous utilisez ZendStudio pour générer des fichiers wsdl, l'adresse cible du service Web doit être correctement indiquée. L'extrait est le suivant :

.
...
  <service name="mathService">
    <port binding="typens:mathBinding" name="mathPort">
      <soap:address location="http://localhost/php/soap/soap_server.php"></soap:address>
    </port>
  </service>
...
Copier après la connexion

   

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

更多PHP使用SOAP扩展实现WebService的方法相关文章请关注PHP中文网!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal