Construction du web service serveur

Construire un service web en PHP 5 grâce à l'extension SOAP

Introduction

SOAP est un protocole basé sur XML, qui permet l'échange de données structurées entre applications. PHP 5 fournit une nouvelle extension, permettant de créer aisément des clients et serveurs SOAP, basée sur un ensemble de classes de bas niveau. Nous allons donc voir comment créer un service web simple (un serveur SOAP ) et comment interroger ce serveur (un client SOAP ). Notre service web sera décrit dans un fichier WSDL.

Conclusion

Encore une fois, PHP 5 nous apporte ici une nouvelle fonctionnalité très intéressante, qui simplifie grandement les choses en matière d'interrogation ou de création de service web. Le même résultat aurait demandé quelques centaines de lignes de code en PHP 4.

WSDL Writer 0.3-katy.1 : Génération Automatique de WSDL en PHP 5

L'outil WSDL Writer by katy est le prolongement du projet WDSL-Writer (par Giffin.org et abandonné de son auteur David Griffin). Premièrement, il fonctionne très bien. Ensuite même les types complexes (classes) sont bien gérés et générés dans le WSDL. Son utilisation est simple et relative à la PhpDoc. Le site de Katy illustre et résout des exemples d'utilisation. Ce générateur de WSDL semble correspondre parfaitement à ce que je cherchais, bilan : merci Katy !

Un seul souci rencontré : undefined ReflectionProperty::getDocComment() La cause provenait de ma version de PHP : 5.0.4 et la résolution s'est faite en compilant le Wsdl sur un PHP 5.2.0

Construire ses classes avec Dia et le plugin uml2php5

Créer un service web avec uml2php5

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.

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 décrivant le service web, qui restait quand même la tâche la plus fastidieuse.

Conclusion personnelle

Après 2 heures de découverte de Dia et du plugin uml2php5, il est facile de construire le WSDL pour des retours de type primitifs tels que string,int,boolean. Par contre pour retourner des types complexes tels que des objets, il faudrait obtenir la documentation du plugin. Dia est un bon outil, il est même gratuit. Le plugin aussi est gratuit excepté sa documentation qui ne semble pas encore écrite.

Class: PHP WSDL Generator : Generate WSDL from PHP class' code

Le générateur de WSDL à partir de classes PHP écrit par Protung Dragos fût un échec total en 2007, car la génération de l'exemple fournit n'ajoutait me pas les méthodes attendues. Re-testé en 2009, il semble mieux fonctionner.

Class: Soap Discovery : Generate WSDL for SOAP Web service with reflection

Ce générateur de WSDL à partir de classes PHP écrit par Braulio José Solano Rojas a généré quelque chose de valide, mais semble générer que du type string en retour. Il est donc incomplet.

A voir ou tester

  • WSO2 Web Services Framework for PHP (WSO2 WSF/PHP)
  • Les articles PHP SOAP de ericmery.fr
    • Tutorial : Générer un WSDL pour votre service web SOAP PHP avec le ‘Wsdl Generator’ de Zend Studio
    • PHP & Web Services : intérêt de pointer, pour un serveur SOAP, vers son wsdl de façon dynamique en HTTP
    • Tutorial #1 – Web Services en PHP 5 : Développement d’un serveur et client SOAP de base
    • Meilleurs softs pour développer/tester/debug vos web services SOAP
    • Générateur WSDL PHP5
  • Build Web services with PHP in Eclipse (avec l'éditeur graphique de WSDL)

Références

Ecrire un Web Service en PHP

Dans la mesure où il s’agit d’un standard basé sur XML, la structure du WSDL vous semblera familière si vous avez une connaissance un peu approfondie du XML. Le fichier WSDL se divise en plusieurs parties : un ensemble d’éléments décrivant les types de données utilisés par le service, les messages que le service peut recevoir, ainsi que les liaisons SOAP associées à chaque message. Le document WSDL commence par l’entête XML standard contenant un identificateur de version <?xml version=»1.0»?>, et que l’élément racine du document se nomme <definitions>. Ce dernier, donnant le nom du service, peut prendre plusieurs attributs facultatifs, qui le décrivent et déclarent les espaces de noms utilisés (namespaces) à utiliser dans le reste du document. Ensuite, les types complexes nécessaires pour la définition de l’interface du service sont définis au sein de l’élément types.

Cependant, il est dans la pratique assez rare d’écrire le corps du fichier à la main : la plupart des environnements de développement savent en effet générer le fichier WSDL sur la base des caractéristiques du service développé.

Bien que vous soyez certainement capable de créer un document WSDL à la main, quelques outils permettent d’automatiser le processus de définition d’un Web Service avec WSDL. Par exemple:

Note: Important! L'auto génération du fichier WSDL (avec auto découverte des fonctions) utilise les blocs de documentation de PHP insérés par le développeur dans ses fonctions, afin de trouver les types retournés. De ce fait, pour les types scalaires, c'est le seul moyen de les déterminer de manière sûre, et concernant les types de retour des méthodes, c'est le seul moyen de les découvrir (PHP étant faiblement typé). Ceci signifie que documenter de manière correcte vos fonctions n'est pas seulement une bonne pratique, c'est tout simplement essentiel pour partager vos fonctions en tant que services SOAP auto générés.

Voyez la documentation PHP du constructeur SoapServer et l'article complet et gratuit de Yohann Poiron sur PHP Solutions 2011-02 : Écrire un Web Service en PHP, ainsi que les articles sur son blog :