Logo classes.scriptsphp.org PHP

go to nav bar

Créer un service web avec uml2php5

Date :: 2005-02-10
Last Updated :: 2005-02-12


Introduction

uml2php5 est un plugin destiné à se greffer sur Dia, application de modélisation UML fonctionnant sous linux et windows, permettant de générer automatiquement les squelettes des classes PHP à partir des diagrammes. Ce plugin est basé sur XSLT.
Depuis la version 2.0, uml2php5 intègre une nouvelle fonctionnalité fort intéressante, la génération de services web basés sur SOAP et WSDL. Le plugin génèrera la totalité des fichiers nécessaires au fonctionnement de votre service web, à savoir, le serveur SOAP, le fichier WSDL décrivant le service web et le squelette de la (ou des) classe(s) de gestion des requêtes envoyées au service. Nous allons voir comment s'en servir.

Installation

Installation de Dia

Commençons par installer Dia, le logiciel de création de diagramme UML :

1 - Sous linux:
Il existe différentes manières d'installer ce logiciel, vous pouvez compiler les sources ou bien utiliser des paquets ( .deb ou rpm ) précompilés, il en existe pour à peu près toutes les distributions majeures.
Personnellement, un simple apt-get install dia m'a suffi. Chez moi le script a été installé dans /usr/share/dia

2 - sous windows :
Télecharger l'installer et laissez-vous guider, c'est aussi simple que ça.

Installation de uml2php5

1 - linux
Une fois l'archive télechargée, commencez par la décompresser :
tar -zxvf uml2php5-*.tar.gz

2 - windows :
Dézipper l'archive grâce à votre logiciel favori.

Dans un cas comme dans l'autre, les fichiers suivants vont être extraits dans un répertoire :

  • * stylesheet.xml
  • * dia-uml-classes.zx
  • * dia-uml2php5.zx
  • * dia-uml2php5.conf.xsl

Copiez tout ces fichiers dans le répertoire xslt de Dia. Comme indiqué dans la documentation officielle de uml2php5, il est conseillé de faire une copie de sauvegarde du fichier stylesheet.xml.

Configurons uml2php5

Nous allons donc configurer uml2php5, et notamment l'addresse de notre serveur SOAP.
Le fichier de configuration à éditer est un fichier XSL nommé dia-uml2php5.conf.xsl.
Recherchez le paramètre <xsl:param name="SOAP_SERVER_URL"/> et remplacez-le par l'URL que vous désirez obtenir pour votre serveur. Vous pouvez jeter un oeil aux autres paramètres, mais leur valeur par défaut nous conviendra très bien pour le moment.

Créons notre diagramme UML

Description de notre service web

Nous allons créer un service web très simple à titre d'exemple. Il comprendra quatre méthodes publiques destinées à additionner, soustraire, multiplier ou diviser deux nombres.

  • myWebService :: add( $a , $b ) : Additionne $a et $b;
  • myWebService :: sub( $a , $b ) : Soustraie $a et $b;
  • myWebService :: mul( $a , $b ) : Multiplie $a et $b;
  • myWebService :: div( $a , $b ) : Divise $a par $b.

Le diagramme UML

Voici comment créer le diagramme ci-dessous :

- Dans le menu général de Dia, sélectionnez "nouveau" dans le menu fichier, une nouvelle fenêtre vierge s'ouvre.
- Toujours dans la fenêtre principale de Dia, selectionnez UML, et cliquez sur "classe".
- Déplacez-vous dans la fenêtre de votre diagramme (encore vide) et cliquez, une boite "classe" apparait.
- Double-cliquez sur cette boite, un menu apparait. Il va vous permettre de renseigner les méthodes, propriétés, nom, ... de la classe.
- dans le premier onglet nommé "classe", renseignez le nom de la classe, ici myWebService et le stéréotype SOAP.
- Passez directement dans l'onglet "opérations" pour renseigner les quatre méthodes de la classe.
- Renseignez donc le nom de chaque méthode (add, sub, mul et div), leur visibilité (publique) et le type de retour attendu (float).
- Pour chaque méthode, renseignez également leurs paramètres (a et b) et le type de ces derniers (float).


Voilà, vous pouvez sauvegarder votre diagramme.

Diagramme UML de notre service web

Exportons notre diagramme

Pour exporter la totalité de notre service web, il faut procéder en deux étapes. Tout d'abord, exportons la classe qui gérera les requêtes envoyées à notre service web :

- Dans la fenêtre où se trouve votre diagramme, faites un clic droit > fichier > exporter. Déterminez le type de fichier : Filtre de transformation XSL (*.code) et validez. Un boite de dialogue s'ouvre, selectionnez UML-CLASSES-EXTENDED et PHP5. L'export vous générera le squelette de la classe myWebService.class.php dans le même répertoire que votre fichier Dia.

- De la même manière, exportez votre diagramme en utilisant les paramètres UML-CLASSES-EXTENDED et PHP5/WSDL/SOAP Web Service. Cet export vous générera le fichier WSDL et le serveur SOAP.

Les fichiers générés

Voici les codes sources des trois fichiers générés par uml2php5.

La classe myWebService

Squelette de la classe qui va gérer les requêtes vers le service web. Il va bien sûr falloir remplir les méthodes.

<?php
/**
 * 
 * Code skeleton generated by dia-uml2php5 plugin
 * written by KDO kdo@zpmag.com
 */

class myWebService {


    
/**
     * additionne $a et $b
     * @access public
     * @param float $a 
     * @param float $b 
     * @return float
     */

    
public final  function add($a$b) {

    }


    
/**
     * soustraie $a et $b
     * @access public
     * @param float $a 
     * @param float $b 
     * @return float
     */

    
public final  function sub($a$b) {

    }


    
/**
     * multiplie $a et $b
     * @access public
     * @param float $a 
     * @param float $b 
     * @return float
     */

    
public final  function mul($a$b) {

    }


    
/**
     * @access public
     * @param float $a 
     * @param float $b 
     * @return float
     */

    
public final  function div($a$b) {

    }


}
?>

Le serveur SOAP

Le serveur SOAP, complet, il n'y a rien à retoucher.

<?php
/**
 * Code generated by dia-uml2php5 plugin
 * written by KDO kdo@zpmag.com
 */

if (empty($_GET['action'])) {
    die(
'SOAP server error');
}

// disabling WSDL cache
ini_set('soap.wsdl_cache_enabled'FALSE);
$server = new SoapServer('Webservices.wsdl');

// Selecting SOAP action
switch ($_GET['action']) {
    case 
'myWebService':
        require_once(
$_GET['action'].'.class.php');
        
$server->setClass($_GET['action']);
        break;
    default :
        die(
'SOAP server error');
}
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?>

Le fichier WSDL

Le fichier WSDL, complet, il n'y a rien à retoucher si vous avez pris soin de configurer l'URL du serveur SOAP comme indiqué au début de l'article.

<?xml version="1.0" encoding="UTF-8"?>
<!--
    This file has been generated by UML2PHP5            
    UML2PHP5 is free and released under GPL
    Copyright KDO kdo@zpmag.com        
    UML2PHP5 : uml2php5.zpmag.com
-->
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:webservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="WebServices" targetNamespace="urn:webservice">
<message name="addRequest">
<part name="a" type="xsd:float"/>
<part name="b" type="xsd:float"/>
</message>
<message name="addResponse">
<part name="return" type="xsd:float"/>
</message>
<message name="subRequest">
<part name="a" type="xsd:float"/>
<part name="b" type="xsd:float"/>
</message>
<message name="subResponse">
<part name="return" type="xsd:float"/>
</message>
<message name="mulRequest">
<part name="a" type="xsd:float"/>
<part name="b" type="xsd:float"/>
</message>
<message name="mulResponse">
<part name="return" type="xsd:float"/>
</message>
<message name="divRequest">
<part name="a" type="xsd:float"/>
<part name="b" type="xsd:float"/>
</message>
<message name="divResponse">
<part name="return" type="xsd:float"/>
</message>
<portType name="myWebServicePortType">
<operation name="add">
<input message="tns:addRequest"/>
<output message="tns:addResponse"/>
</operation>
<operation name="sub">
<input message="tns:subRequest"/>
<output message="tns:subResponse"/>
</operation>
<operation name="mul">
<input message="tns:mulRequest"/>
<output message="tns:mulResponse"/>
</operation>
<operation name="div">
<input message="tns:divRequest"/>
<output message="tns:divResponse"/>
</operation>
</portType>
<binding name="myWebServiceBinding" type="tns:myWebServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="add">
<soap:operation soapAction="urn:myWebServiceAction"/>
<input>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="sub">
<soap:operation soapAction="urn:myWebServiceAction"/>
<input>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="mul">
<soap:operation soapAction="urn:myWebServiceAction"/>
<input>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="div">
<soap:operation soapAction="urn:myWebServiceAction"/>
<input>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="Webservice">
<port name="myWebServicePort" binding="tns:myWebServiceBinding">
<soap:address location="http://votresite.com/soap_server.php?action=myWebService"/>
</port>
</service>
</definitions>

** http://votresite.com correspond à l'URL que vous avez renseignée dans le fichier de configuration de uml2php5.

Remplissons la classe qui va gérer notre service web

Une fois tous les fichiers générés, il reste la dernière étape pour mettre en place notre service web : compléter les méthodes de la classe qui va gérer les requêtes. Comme vous pouvez le constater, c'est assez simpliste pour l'exemple que nous avons choisi.

<?php
/**
 * 
 * Code skeleton generated by dia-uml2php5 plugin
 * written by KDO kdo@zpmag.com
 */

class myWebService {

    public final  function 
add($a$b) {
        return 
$a $b;
    }

    public final  function 
sub($a$b) {
        return 
$a $b;
    }

    public final  function 
mul($a$b) {
        return 
$a $b;
    }

    public final  function 
div($a$b) {
        if( 
$b == 0) {
            throw new 
SoapFault('Data Type' '$b ne peut être égal à 0');
        }
        return 
$a $b;
    }


}
?>

Utilisation - Interrogation du service web

L'utilisation est classique et ne nécessite pas de commentaire particulier.

<?php

ini_set
('soap.wsdl_cache_enabled'0);
$client = new SoapClient('http://votresite.com/Webservices.wsdl'); 

echo 
$client->add(10,1) , '<br/>';


echo 
$client->sub(10,2) , '<br/>';


echo 
$client->mul(10.52) , '<br/>';


echo 
$client->div(10,2) , '<br/>';
?>

Liens utiles

Conclusion

Cette nouvelle fonctionnalité, arrivée avec la version 2.0 de uml2php5 est purement et simplement un régal ! La génération de service web devient d'une facilité déconcertante, notamment grâce à la génération automatique du fichier WSDL decrivant le service web, qui restait quand même la tâche la plus fastidieuse (j'ai dit chiante ? :).

Trackback

Il n'y a pas de trackback recensé pour cet article.

Faire un trackback sur cet article http://classes.scriptsphp.org/Trackbackserver.Creer-un-service-web-avec-uml2php5, récupérer les trackback sur cet article

Merci de ne pas suivre ce lien emails.

0.1474s | «»
PHP powered