dimanche 29 juin 2003

Web service


WEB SERVICE

Un web service est une application serveur qui est disponible sur Internet. L'interface est disponible pour des applications clientes. On peut ainsi accéder aux fonctions que le serveur offre. Le client et le serveur utilisent le WSDL (web service description language) pour communiquer ensemble.



Une application serveur fonctionnant derrière un serveur Web offre une panoplie de fonctions. L'application client peut utiliser ces fonctions. Le protocole utilisé est bien sur le HTTP. Ce protocole est simple et fonctionne sur la majorité des plateformes existantes actuellement. La façon d'appeler des applications à distance a été appelée SOAP (simple object acces protocol).

SOAP transmet ses données via le langage XML. Le client et le serveur utilisent ce langage pour communiquer. Il est ainsi possible de rajouter une structure de donnée en fournissant un schéma XML (XSD). Comme vous pouvez le remarquer, le principe des Webservices est simple. Delphi le simplifie encore d'avantage. Il existait bien avant les Webservices, des technologies qui offraient ce genre de fonctionnalités (accès à distances de fonction). On n'a qu'à penser à Corba et DCOM. Il est possible de faire un serveur Web en langage C et le client en Java.

Un exemple fort simple d'un service Web serait d'avoir une méthode dictionnaire sur le serveur. Lorsque l'application client appellerait la méthode dictionnaire, un mot au hasard parviendrait à l'application client. Imaginez maintenant toutes les possibilités.

Delphi est les Web services

Dépendant de ce qu'on désire faire, il existe plusieurs façons d'utiliser des web services sous delphi. Nous verrons comment créer un webservice qui utilisera MyBase.

Création du serveur

Démarrez un nouveau projet, Sélectionner Web Service et cliquer sur Application Serveur Soap.


Sélectionnez ensuite le type d'application Serveur que vous désirez. J'utilise un serveur apache, j'ai pris l'exécutable autonome CGI.


Delphi vous demandera si vous désirez créer une interface, répondez non. Sauvegarder le TWebModule sous le nom SWebMod et le projet sous SoapServer.


Ajouté au projet, un serveur de données soap


Inscriver le nom SoapDataMod au serveur de donnée et sauvegardé sous le nom SDataMod.


Ajoutez un TClientDataSet et un TDataSetProvider sur le datamodule. Mettez la propriété Name du TClientDataSet à cdsAnimal et celle du TDataSetProvider à dspAnimal. Mettez la propriété Filename du TClientDataSet à animals.xml (Inclus dans le dossier partagé de Borlan). Mettez la propriété Active du TClientDataSet à True. Mettez la propriété DataSet du TDataSetProvider à cdsAniaml. Mettez la propriété ResolveToDataSet du TDataSetProvider à True.



Compilez le projet et mettre le fichier exécutable ainsi que les fichiers suivants:
  • animal.cds
  • animal.dbt
  • animal.xml
pour la base de donnée dans le répertoire cgi-bin du serveur Web.

Démarrez votre serveur Web et inscrivez dans votre navigateur web: http://ip/cgi-bin/SoapServer/wsdl. ip étant bien sur votre adresse ip. Si vous voyez une image comme ci-dessous, c'est que vous avez bien suivie les instructions.


Code source du serveur disponible ici.

Création du client

Créez un nouveau projet. Sauvegarder l'unité sous le nom ClientForm et le projet sous SoapClient.

Ajoutez un TSoapConnection sur la fiche à partir de l'onglet Web service. Mettez sa propriété UseSOAPAdapter à false.

Mettre la propriété URL du TSoapConnection à l'adresse où est votre serveur suivi du nom du serveur suivi de soap, suivi du nom de l'interface. On utilisera à des fins éducatives et pour faciliter l'adresse ip: 127.0.0.1. J'utilise apache et j'ai sélectionné cgi pour le serveur donc le programme serveur sera logé dans le répertoire: cgi-bin.

Ce qui donne: http://127.0.0.1//cgi-bin/SoapServer/soap/ISoapDataMod

Ajoutez ensuite un TClientDataSet et mettez sa propriété RemoteServer au composant TSoapConnection. Ensuite ouvrez la propriété ProviderName et sélectionné dspAnimal.

Mettez sa propriété active à true.

Ajoutez un TDataSource et lié le au ClientDataset grâce à sa propriété DataSet.

Ajoutez un TDBGrid et lié le au datasource grâce à sa propriété DataSet.

Ajoutez un TDBNavigator et lié le au datasource grâce à sa propriété DataSet.

Ajoutez un TDBImage et lié le au datasource grâce à sa propriété DataSource.Mettez ensuite sa propriété datafield à bmp.

Vous pouvez démarrer le programme, vous obtiendrez environ le résultat ci-dessous.



Code source du client disponible ici.