Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

SOAP avec PHP

Article posté le 06-02-2014 dans la catégorie PHP

Note: à l'heure où cet article est écrit, la version de PHP la plus récente est la 5.4.

What is SOAP ?

SOAP, pour simple object access protocol (du moins au départ cart aujourd'hui SOAP semble avoir perdu son acronyme) est un protocole (contrairement à REST) d'accès à des données - webservices sur le web.

Moins simple que REST car il rajoute une surcouche au protocole HTTP (via un couplage faible : communication entre deux composants physiquements séparés), il reste néanmmoins très utilisé.

SOAP est géré en natif en PHP5 grâce à un API permettant de faire un serveur et un client de manière simple. Ce protocole fonction de la manière suivante :

SOAP repose sur la technologie XML, il est donc important de bien la connaître.

Client SOAP

Pour accéder à un serveur, on utilise SoapClient. On lui donne l'adresse du WSDL. Maintenant, en tant que développeur et que vous avez consulté manuellement (via votre navigateur) ce fichier WSDL, vous connaissez les méthodes autorisées et les paramètres attendus, le format de la réponse. Il est donc très simple d'intégrer l'appel à un webservice SOAP dans une application ou un site PHP :

try{
$clientSOAP = new SoapClient("http://www.mon-web-service.com/soap);
$resultats = $clientSOAP->uneMethode($parametre1, $parametreX);
foreach ($resultats as $resultat) {
echo htmlentities($resultat->getValeur(), ENT_COMPAT, 'UTF-8');
}
} catch SoapFault $e) {
//Gestion de l'erreur
}

Il est possible de mettre un deuxième paramètre au constructeur : il s'agira d'un tableau contenant des paramètres, par exemple l'encodage, la compression... Il y a un exemple plus loin dans cet article.

On peut aussi contacter un server SOAP qui n'a pas de WSDL. Dans ce cas là, le premier paramètre doit être mis à NULL, et l'URL du serveur mise dans le tableau des paramètres (voir plus bas dans la partie serveur).

Débuggage

Il est aisé de débugger. Vous avez juste à utiliser le paramètre 'trace' et le mettre à 1 quand vous instanciez le client SOAP :

$client = new SoapClient(
'http://exemple.com/wsdl', ['trace' => 1]
);

Cela vous affichera alors l'intégralité de la réponse à chaque appel d'une méthode du webservice.

Mettre en place un serveur SOAP

Mettre en place un serveur SOAP est également très facile. Il s'agit juste d'instancier une classe contenant des méthodes publiques:

class MonServeur {
      public function ditBonjour($strNom) {
           return 'Bonjour ' . $strNom;
       }
}

Actuellement, il n'existe pas de méthode toute faite pour générer le fichier WSDL. Notre serveur fonctionnera donc sans, car c'est assez long à faire. Il existe aussi des outils qui vous le feront. Cependant, Zend à affirmé que dans un futur proche, PHP devrait le permettre plus facilement.

A présent, la mise en place du serveur est assez simple: utilisation de la classe SoapServer, en lui précisant notre classe pour gérer les demandes des clients:

$options = ['uri' => 'http://mon-serveur.dev/soap/server/'];
$server = new SoapServer(NULL, $options);
$server->setClass('MonServeur'); //Nom de la classe qui gère les demandes
$server->handle();

Maintenant, vous pouvez accéder à votre serveur :

$options = [
'location' => 'http://mon-serveur.dev/soap/server/server.php',
'uri' => 'http://mon-serveur.dev/soap/server/'];
$client = new SoapClient(NULL, $options);
echo $client->ditBonjour('Eric') . "n";

 Voilà donc pour l'essentiel. SOAP reste assez utilisé, mais il est officieusement mort, REST, ayant par sa simplicité, pris le dessus.


Tweet
comments powered by Disqus