C'est quoi un service web

Un service web , permet , à partir de votre propre programme (appli php par exemple ) d'effectuer une opération prise en charge par un serveur distant et qui distribue les informations à qui le souhaite ...

Exemple , je veux la météo sur lille , je vais demander au serveur X de me donner cette météo (température , levé et couché du soleil ect ..) pour la ville de lille .

Pour effectuer cela , nous allons utiliser le protocole soap .

Ce que je vais vous montrer

Le principe encore une fois , je ne vais pas aller dans le détail dans ce premier article .. par la suite pourquoi pas .. . Nous allons voir comment creer un service web distant , et nous allons nous connecter pour y récupérer les infos qu'il distribue.

Création du service

Nous allons creer notre service , ici , il s'agit de donner l'adresse ip du serveur distant qui propose un webservice ... rien de bien interessant , mais le but et de comprendre la mise en place d'un service web ...

Commençons donc à creer notre classe :

<?php
$wsdl	=	"sw.wsdl";

class sw{
	
	function affiche()
	{
		$info = "L'adresse ip du server distant est : $_SERVER[SERVER_ADDR]";
		return $info;
	}
}

$server	=	new SoapServer($wsdl);
$server->setClass("sw");
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?>

Nous avons donc une classe sw avec la méthode affiche() qui retourne l'adresse ip du serveur .. le $wsdl dentifie le fichier wsdl qui vat permettre au client de savoir quelle fonctions sont disponibles , avec quels paramétres , et ce que chaque fonction va retourner ...

Nous n'allons pas entrer dans les détails pour la création du fichier wsdl , celui étant d'une complexité assez lourde si nous le faisons à la main .. Heureusement des utilitaires nous dispensent des ce travail .. a savoir , l'editeur ZendStudio (que j'utilise) , ou en gratuit , uml2php5 de dia expliqué dans un précédent billet ...

Voici donc ce fichier que j'ai nommé ws.wsdl :

<?xml version='1.0' encoding='UTF-8'?>

<!-- WSDL file generated by Zend Studio. -->

<definitions name="sw" targetNamespace="urn:sw" xmlns:typens="urn:sw" 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/">
	<message name="affiche"/>
	<message name="afficheResponse">
		<part name="afficheReturn"/>
	</message>
	<portType name="swPortType">
		<operation name="affiche">
			<input message="typens:affiche"/>
			<output message="typens:afficheResponse"/>
		</operation>
	</portType>
	<binding name="swBinding" type="typens:swPortType">
		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
		<operation name="affiche">
			<soap:operation soapAction="urn:swAction"/>
			<input>
				<soap:body namespace="urn:sw" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</input>
			<output>
				<soap:body namespace="urn:sw" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</output>
		</operation>
	</binding>
	<service name="swService">
		<port name="swPort" binding="typens:swBinding">
			<soap:address location="http://soap.lindev.fr/sw.php"/>
		</port>
	</service>
</definitions>

Notez bien ici , que la ligne importante est : http://soap.lindev.fr/sw.php qui correspond à l'adresse ou se trouve le script qui contient les fonction décrites dans le fichier wsdl ..

Voilà , je met donc les fichiers suivants :

  • sw.php
  • sw.wsdl

sur le serveur distant pour qu'ils soient accessibles à cette adresse :

http://soap.lindev.fr

Le client

Pour le client , c'est encore plus simple ..

<?php

$wsdl = "http://soap.lindev.fr/sw.wsdl";

$client	=	new SoapClient($wsdl);

echo $client->affiche();

?>

Nous commençons par définir ou se trouve le fichier du service web à contacter .. ici : http://soap.lindev.fr/sw.wsdl Pius l'on instancie SoapClient avec comme argument , l'adresse du fichier wsdl ...

Grace à l'instance de SoapClient , nous avons de nombreuses possibilitées .. comme avoir des infos sur le web service , les fonctions disponibles ect ...

Ici nous executons juste la méthode distante affiche() qui nous renvoie l'adresse ip du serveur ...

Et voilà nous avons creé un service web ... bon ok ce service est vraiment peut utile , mais le principe reste le même pour des requêtes plus complexes .

Si vous avez des questions , n'hésitez pas , en me contacter ..

Lien de ressources : fonctions SOAP