Tutoriel : Utilisation d'un serveur DataSnap REST avec une application

De RAD Studio
Aller à : navigation, rechercher

Remonter à Tutoriels Bases de données et LiveBindings


La technologie DataSnap fournit la capacité de créer des applications Client-Serveur qui communiquent par le biais d'Internet, du réseau local ou de l'hôte local.

L'exemple suivant illustre l'utilisation de DataSnap lors de la création d'une application Client-Serveur locale simple. Les applications client et serveur sont implémentées dans Delphi. Après la création du serveur et l'activation de la connexion entre le client et le serveur avec DataSnap, le client peut appeler des méthodes définies et implémentées sur le serveur.

Vous pouvez implémenter un serveur dans Delphi ou C++Builder. Il n'est pas nécessaire que le client soit implémenté dans le même langage. DataSnap vous permet d'avoir un serveur Delphi et un client C++Builder, ou vice-versa.

Composants serveur DataSnap clés

Les principaux composants sont :

Le composant TDSServer est le coeur logique de l'application serveur DataSnap. Il contient les méthodes Start et Stop pour démarrer et arrêter le serveur. Il contient également la propriété AutoStart. Par défaut, la valeur de AutoStart est définie sur True, de sorte que le serveur démarre automatiquement au démarrage de l'application. Vous avez besoin d'un seul composant TDSServer par application serveur.

Le composant TDSServerClass représente une classe serveur. Le serveur DataSnap crée et détruit automatiquement les instances des classes serveur.

Le protocole de communication HTTP permet d'établir la communication entre le client et le serveur.

Création de l'application serveur

  1. Créez un nouveau projet :
    • Choisissez Fichier > Nouveau > Autre dans le menu principal.
    • Accédez au noeud Serveur DataSnap dans la colonne de gauche, sous le noeud Projets C++Builder ou Projets Delphi.
    • Sélectionnez Application DataSnap REST et appuyez sur OK.
    • Spécifiez le type de l'application :
      1. Sélectionnez Application fiches autonome et appuyez sur le bouton Suivant .
      2. Choisissez l'une des options suivantes :
        • Application VCL
        • Application FireMonkey
      3. Conservez les valeurs par défaut concernant l'utilisation du protocole de communication HTTP et appuyez sur le bouton Suivant.
      4. Sélectionnez l'option Classe de méthodes serveur et appuyez sur le bouton Suivant.
      5. Choisissez TComponent pour implémenter entièrement la classe serveur et appuyez sur le bouton Suivant.
      6. Choisissez l'emplacement du projet et appuyez sur le bouton Terminer.
  2. Changez la propriété Caption de la fiche Form1 en ServerForm.
    ServerFormDSTutorial.png
  3. Cliquez sur l'élément de menu principal Fichier > Tout enregistrer.
  4. Enregistrez l'unité FormUnit1 en tant que ServerUnit, l'unité WebModuleUnit1 en tant que WebModuleUnit1, l'unité ServerMethodsUnit1 en tant que ServerMethodsUnit1, et enregistrez le projet en tant que MyServerProj.
    A ce stade, tous les composants DataSnap nécessaires sont automatiquement ajoutés à l'unité WebModuleUnit1 :
    WebModuleDSApplication.png
  1. ServerMethodsUnit1 contient l'implémentation de deux méthodes simples appelées EchoString et ReverseString, qui renvoient la valeur donnée sous la forme d'un paramètre dans des états inversés respectifs normaux. Dans cet exemple, nous ajoutons une nouvelle méthode à ServerMethodsUnit1 - la somme de deux nombres à virgule flottante :
    Dans Delphi :
    unit ServerMethodsUnit1;
    
    interface
    uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;
    type
      {$METHODINFO ON}
      TServerMethods1 = class(TComponent)
      private
        { Private declarations }
      public
        { Public declarations }
         function Sum(const A, B: Double): Double;
      end;
      {$METHODINFO OFF}
    
    implementation
    uses System.StrUtils;
    
    function TServerMethods1.Sum(const A, B: Double): Double;
    begin
      Result := A + B;
    end;
    
    end.
    

    Remarque : La directive {$METHODINFO ON} provoque la génération des informations d'exécution requises par le serveur Datasnap. Ainsi, cela est nécessaire, ce n'est pas simplement un commentaire ! Pour plus d'informations, voir Directive METHODINFO (Delphi).

    Dans C++ :

    Sur l'unité "ServerMethodsUnit1.h", ajoutez cette déclaration de fonction :

    double __fastcall sum(double A, double B);
    

    Complétez le code de la fonction que vous venez d'ajouter à "ServerMethodsUnit1.cpp" :

    double __fastcall TServerMethods1::sum(double A, double B)
    {
    	return A + B;
    }
    
  2. Avant de créer l'application client, exécutez le serveur :
    • Choisissez Exécuter > Exécuter sans déboguer dans le menu principal.
    • Cliquez sur le bouton Démarrer. Vous pouvez réduire la boîte de dialogue ServerForm qui s'affiche.

Création de l'application client

  1. Pour créer l'application client dans le même groupe de projets que l'application serveur, procédez comme suit :
    • Dans le Gestionnaire de projets, cliquez avec le bouton droit sur ProjectGroup.
    • Sélectionnez l'option Ajouter un nouveau projet.
    • Depuis l'élément Projets Delphi, sélectionnez Application de bureau, et cliquez sur le bouton OK.
    • Choisissez Application vide et cliquez sur le bouton OK.
    • Cliquez sur l'élément de menu principal Fichier > Nouveau > Autre.
    • Depuis le noeud Serveur DataSnap dans la colonne de gauche, sélectionnez Module client DataSnap REST et appuyez sur le bouton OK.
      RESTClientModuleMenu.png
    • Spécifiez le type du module :
      • Conservez la valeur sélectionnée par défaut -- Serveur local -- et appuyez sur le bouton Suivant.
      • Conservez la valeur par défaut sélectionnée -- Serveur autonome DataSnap -- et appuyez sur le bouton Suivant.
      • Conservez la valeur par défaut pour les paramètres de connexion et appuyez sur le bouton Terminer.
      L'expert a maintenant généré ClientModuleUnit et ClientClassesUnit.
  2. Changez la propriété Caption de la fiche Form2 en ClientForm.
  3. Cliquez sur l'élément de menu principal Fichier > Tout enregistrer.
  4. Enregistrez l'unité Unit2 en tant que ClientUnit, l'unité ClientModuleUnit1 en tant que ClientModuleUnit, l'unité ClientClassesUnit1 en tant que ClientClassesUnit, et le projet en tant que MyClientProj.
  5. Enregistrez le groupe de projets dans DSServerExample.
  6. Remplissez la fiche client avec les contrôles utilisés pour l'introduction des données et l'écriture du résultat (libellés, zones d'édition et un bouton pour calculer la somme), comme illustré dans la figure suivante. Changez la propriété Name du TEdit à côté du libellé A en EditA, et changez la propriété Name du TEdit à côté de B en EditB. Définissez la propriété Name du TEdit Result sur EditResult. Définissez la propriété Text de tous les contrôles TEdit sur "vide". Définissez la propriété Name de TButton sur Calculate.
    La fiche client a maintenant l'aspect suivant :
    DSAppClientForm2.png
  7. Ajoutez le nom des unités ClientClassesUnit et ClientModuleUnit à la liste des unités dans ClientUnit.pas.
  • Pour C++, ajoutez la ligne #include "ClientClassesUnit.h" et #include "ClientModuleUnit.h" au début de ClientUnit.cpp.
  1. Appelez les méthodes désirées de l'application client. Dans cet exemple, implémentez l'événement OnClick du composant TButton afin d'appeler la méthode Sum de l'unité client DataSnap que vous venez de générer automatiquement. Ici, le gestionnaire d'événement du bouton est TClientForm.CalculateClick (Delphi) ou TClientForm::Button1Click (C++).

    Dans Delphi :

    procedure TClientForm.CalculateClick(Sender: TObject);
    var
      Temp: TServerMethods1Client;
      A, B: Double;
    begin
      Temp := TServerMethods1Client.Create(ClientModule1.DSRESTConnection1);
    try
      A := StrToFloat(EditA.Text);
      B := StrToFloat(EditB.Text);
      EditResult.Text := FloatToStr(Temp.Sum(A, B));
    finally
      Temp.Free;
    end;
    end;
    
    Dans C++ :
    void __fastcall TClientForm::Button1Click(TObject *Sender)
    {
      TServerMethods1Client *Temp;
      double A, B;
    
      Temp = new TServerMethods1Client(ClientModule1->DSRestConnection1);
      try
      {
        A = StrToFloat(EditA->Text);
        B = StrToFloat(EditB->Text);
        EditResult->Text = FloatToStr(Temp->sum(A,B));
      }
      __finally
      {
        delete Temp;
      }
    }
    
    Remarque : Si vous changez la définition des méthodes de serveur, vous devez actualiser le proxy. Pour cela, cliquez avec le bouton droit sur le composant TDSRestConnection dans ClientModuleUnit et cliquez sur Générer les classes client DataSnap dans le menu contextuel.
  2. Finalement, construisez et exécutez l'application client. La fiche client est affichée. Entrez des nombres décimaux dans les champs A et B, et cliquez sur le bouton Calculate. La somme devrait apparaître dans le champ Result.
    DSAppClientRunning.png

Voir aussi