Pierre Porcheret




Voir la liste des articles



25 11 2014


A la Soap !

De nos jours beaucoup de sites professionnels utilisent les Webservices pour échanger des données (voir definition wikipedia).

Ce service va permettre de traiter des demandes sans se soucier du protocole (POP, HTTP...etc)

Ce service est aujourd'hui disponible en php nativement. Pour les versions antérieures à php 5.0 on pouvait se servir d'une librairie NUSOAP pour simuler ce service (info et exemple)

Depuis php5, SOAP est directement intégré à php.

Exemple d'utilisation :

Creer un fichier server.php sur votre serveur web qui va creer un serveur SOAP :

nano server.php



<?php
ini_set("soap.wsdl_cache_enabled", "0");
$serveurSOAP = new SoapServer('Nerkdesign.wsdl');
$serveurSOAP->addFunction('getHello');
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
        $serveurSOAP->handle();
}
else
{
        echo 'desole, je ne comprends pas les requetes GET, veuillez seulement utiliser POST';
}

function getHello($prenom, $nom)
{
        return 'Hello ' . $prenom . ' ' . $nom;
}
?>

 


Ce serveur analyse une requette et renvoi une réponse

Pour se faire il s'appuit sur un fichier wsdl comme une sorte de template. Il faut donc créer un model de demande :

Exemple :

nano Nerkdesign.wsdl


<?xml version="1.0"?>
<!-- partie 1 : Definitions -->
<definitions  name="Nerkdesign"
  targetNamespace="urn:Nerkdesign"
  xmlns:typens="urn:Nerkdesign"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
     <xsd:schema  xmlns="http://www.w3.org/2001/XMLSchema"
   targetNamespace="urn:Nerkdesign">
  </xsd:schema>
 </types>


 <message name="getHelloRequest">
  <part name="prenom" type="xsd:string"/>
  <part name="nom" type="xsd:string"/>
 </message>
 <message name="getHelloResponse">
  <part name="return" type="xsd:string"/>
 </message>

  <portType name="NerkdesignPort">
  

  <operation name="getHello">
   <input message="typens:getHelloRequest"/>
   <output message="typens:getHelloResponse"/>
  </operation>
 </portType>

  <binding name="NerkdesignBinding" type="typens:NerkdesignPort">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="getHello">
   <soap:operation soapAction="NerkdesignAction"/>
   <input name="getHelloRequest">
    <soap:body  use="encoded"
      namespace="urn:Nerkdesign"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </input>
   <output name="getHelloResponse">
    <soap:body  use="encoded"
      namespace="urn:Nerkdesign"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </output>
  </operation>
 </binding>

 <!-- partie 7 : Service -->
 <service name="NerkdesignService">
  <documentation>Retourne une phrase simple </documentation>
  <!-- partie 8 : Port -->
  <port name="HelloYouPort" binding="typens:NerkdesignBinding">
   <soap:address location="http://<VOTRE_IP>/server.php"/> <!-- modifier ce chemin vers server.php -->
  </port>
 </service>
</definitions>


Il faut ensuite créer un fichier client pour tester ce servceur :

nano client.php



<?php

ini_set("soap.wsdl_cache_enabled", "0");

$clientSOAP = new SoapClient('Nerkdesign.wsdl');

echo $clientSOAP->getHello('Jean','Dupont');

?>


 

sources : http://fr.wikibooks.org/wiki/Programmation_PHP/Exemples/webService#WSDL


categorie :