Maison >développement back-end >tutoriel php >PHP implémente WebService via SOAP

PHP implémente WebService via SOAP

*文
*文original
2017-12-29 19:03:522372parcourir

Cet article présente principalement la méthode PHP utilisant l'extension SOAP pour implémenter WebService. Il analyse en détail les principes de l'extension SOAP et les techniques associées pour implémenter WebService sous forme d'exemples. Les amis dans le besoin peuvent s'y référer. J'espère que cela sera utile à tout le monde.

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. La plupart de ceux trouvés font référence à NuSOAP, un logiciel open source dit puissant, c'est-à-dire certaines classes. L'environnement dans lequel l'article est écrit et décrit est PHP 4.3. 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 classe SoapClient qui possède une nouvelle 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, j'ai besoin de référencer de nombreux fichiers de classe, donc je pense toujours qu'il est préférable d'utiliser l'extension SOAP intégrée ajoutée à PHP 5, tant que cela peut être pratique. Comprenons d'abord SOAP :

1. Comparaison entre SOAP et XML-PRC

Au début du développement des services Web, première utilisation majeure du format XML. messages était appliqué au protocole XML-RPC, où RPC signifie Remote Procedure Call. 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.

Lorsque SOAP est appelé, 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), la propre extension SOAP de PHP ;
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;
?>

4 Exemples

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

Créez 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;
  }
  /**
  * 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(); 
?>
Remarque :

a), cours de mathématiques C'est un webservice 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->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()}";
}
?>
Essentiellement, http://localhost/php/soap/soap_server.php?WSDL sert à accéder à la ligne de commentaire wsdl. ce fichier WSDL doit donc être généré à l'avance. 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.

可以用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的方法必须传入命名参数。

相关推荐:

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

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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