IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Recherches sur REST API


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Retrait�
    Inscrit en
    Mai 2025
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par d�faut Recherches sur REST API
    Bonjour,
    je poss�de un serveur https://sandbox.iniw.fr sur lequel j'ai commenc� � installer un programme appel� lzRestAPI.exe.

    Sur ce programme permet (permettra) d'acc�der une base de donn�es mariadb "selzig" :
    Nom : Capture d'�cran 2025-08-27 135856.png
Affichages : 171
Taille : 6,6 Ko
    Nom de la table : "co"
    coID cl� primaire auto-incr�ment� - coOBJ cl� unique varchar(50) - xxACT index (boolean)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    program lzRestAPI;
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}
      cthreads,
      {$ENDIF}
      SysUtils,
      fphttpapp,
      HTTPDefs,
      httproute,
      fpjson,
      jsonparser,
      mysql56conn,
      SQLDB,
      DB;
     
      procedure catchallEndPoint(aRequest: TRequest; aResponse: TResponse);
      begin
        with aResponse do
        begin
          Content := 'This endpoint is not available.';
          Code := 404;
          ContentType := 'text/plain';
          ContentLength := Length(Content);
          SendContent;
        end;
      end;
     
      procedure jsonResponse(var aResponse: TResponse; Data: string);
      begin
        with aResponse do
        begin
          Content := Data;
          Code := 200;
          ContentType := 'application/json';
          ContentLength := Length(Content);
          SendContent;
        end;
      end;
     
      procedure jsonResponse404(var aResponse: TResponse);
      begin
        with aResponse do
        begin
          Content := 'This endpoint is not available.';
          Code := 404;
          ContentType := 'text/plain';
          ContentLength := Length(Content);
          SendContent;
        end;
      end;
     
      procedure selectOneEndPoint(aRequest: TRequest; aResponse: TResponse);
      const
        cSQL: string =
          'SELECT  coOBJ, xxACT ' + 'FROM co WHERE coID=:coID LIMIT 1;';
      var
        jObject: TJSONObject;
        lzConn: TMySQL56Connection;
        lzTrans: TSQLTransaction;
        lzQuery: TSQLQuery;
      begin
        lzConn := TMySQL56Connection.Create(nil);
        lzQuery := TSQLQuery.Create(nil);
        try
          with lzConn do
          begin
            HostName := 'localhost';
            Port := 3306;              
            UserName :='xxxxxxxxx';
            Password := 'xxxxxxxxx';
            DatabaseName := 'selzig';
            Charset := 'utf8mb4';
          end;
          lzTrans := TSQLTransaction.Create(lzConn);
          lzConn.Transaction := lzTrans;
          lzQuery.Database := lzConn;
          lzQuery.Transaction := lzTrans;
          try
            lzConn.Open;
            with lzQuery do
            begin
              SQL.Text := cSQL;
              Prepare;
              Params.ParamByName('coID').AsString := aRequest.RouteParams['name'];
              Open;
              jObject := TJSONObject.Create;
              try
                if lzQuery.EOF then
                  jsonResponse404(aResponse)
                else
                begin
                  jObject.Strings['coID'] := aRequest.RouteParams['name'];
                  jObject.Strings['coOBJ'] := FieldByName('coOBJ').AsString;
                  jObject.Strings['xxACT'] := IntToStr(FieldByName('xxACT').AsInteger);
                  jsonResponse(aResponse, jObject.AsJSON);
                end;
              finally
                jObject.Free;
              end;
              lzTrans.Commit;
              lzQuery.Close;
            end;
          except
            on e: ESQLDatabaseError do
            begin
              lzTrans.Rollback;
              jsonResponse404(aResponse);
            //  Writeln('Erreur de connexion ou de Rollback à la base : ' +E.Message);
            end;
          end;
        finally
          lzConn.Free;
          lzQuery.Free;
        end;
      end;
     
    begin
      Application.Port := 9090;
      HttpRouter.RegisterRoute('/catchall', rmAll, @catchallEndPoint, True);
      HttpRouter.RegisterRoute('/selectone/:name', rmGet, @selectOneEndPoint);
      Application.Threaded := True;
      Application.Initialize;
      Writeln('Server is ready at localhost ' + IntToStr(Application.Port) + '.');
      Application.Run;
    end.
    Parall�lement sur mon poste de d�veloppement, j'ai cr�� l'application "lzSQLDB.exe".
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    unit wslave;
     
    {$mode ObjFPC}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
      fphttpclient, fpjson, jsonparser, opensslsockets;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        edHTTPS1: TEdit;
        edNUM1: TEdit;
        laHPPTS1: TLabel;
        Memo1: TMemo;
        procedure edNUM1Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Memo1.Lines.Clear;
    end;
     
    procedure TForm1.edNUM1Change(Sender: TObject);
      var
        listitemsjson: string;
        J: TJSONData;
      begin
        if Pos('co',memo1.Lines[1])=1 then
           Memo1.Clear
        else
        with TFPHttpClient.Create(nil) do
        begin
          try
            try
            listitemsjson := Get(edHTTPS1.Text+edNUM1.Text);
            J := GetJSON(listitemsjson);
            with Memo1 do
            begin
              Clear;
              Lines.Add('coID: ' + J.FindPath('coID').AsString);
              Lines.Add('coOBJ: ' + J.FindPath('coOBJ').AsString);
              Lines.Add('xxACT: ' + J.FindPath('xxACT').AsString);
            end;
            except
               Memo1.Lines.Clear;
               showmessage('Erreur : Position de ligne interdite.');
            end;
          finally
            Free();
          end;
        end;
      end;
     
    end.
    Premi�re question : Comment sur le serveur "me faire renvoyer" les 5 lignes, autrement dit, comment envoyer "SELECT coID, coOBJ, xxACT FROM co" ?
    Deuxi�me question : Comment les faire appara�tre dans lzSQLDB.exe ?

    Merci d'avance. Cordialement. Selzig.
    Fichiers attach�s Fichiers attach�s

  2. #2
    Expert confirm�
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    D�cembre 2008
    Messages
    4 246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 4 246
    Par d�faut
    Hello,
    c'est beaucoup plus facile de faire du REST avec Lazarus en utilisant SQLDBRestBridge
    Il faut installer les paquets lazsqldbrest et weblaz
    J'ai essay� de faire une base de donn�es �quivalente � la tienne en sqlite3 . En pi�ce jointe un zip avec 2 projets et cette base de donn�es .
    Le premier projet restreadonly lance un serveur rest sur port 3000 et qui est connect� � la base de donn�es seilzig.db3. La connexion se fait dans le code ici :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        begin
        // Or set in code.
       // C.ConnectionType:=TPQConnectionDef.TypeName;
       // C.DatabaseName:='fpctest';
       // C.HostName:='localhost';
       // C.UserName:='user';
       // C.Password:='secret';
       C.ConnectionType:=TSQLite3ConnectionDef.TypeName;
       C.DatabaseName:='selzig.db3';
       // C.HostName:='localhost';
       // C.UserName:='user';
       // C.Password:='secret';
        end;
    Si on lance l'ex�cutable sans param�tre :
    Nom : restreadonly.png
Affichages : 103
Taille : 27,3 Ko

    Le deuxi�me projet jsonclient permet de se connecter au serveur Rest et de lire les donn�es en json.

    Nom : jsonClient.gif
Affichages : 104
Taille : 99,2 Ko

    [EDIT] c'est aussi OK avec une base de donn�es mariadb 12.1 avec ceci pour la connexion :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
        C.ConnectionType:=TMySQLConnectionDef.TypeName;
        C.DatabaseName:='selzig';
        C.HostName:='localhost';
        C.UserName:='jurassic';
        C.Password:='monMotDePasse';
    Nom : DBeaverMariaDB.png
Affichages : 65
Taille : 41,0 KoNom : MariaDBrestreadOnly.png
Affichages : 65
Taille : 32,0 Ko

    Nom : JsonClient.png
Affichages : 64
Taille : 23,7 Ko


    Ami calmant, J.P
    Fichiers attach�s Fichiers attach�s
    Jurassic computer : Sinclair ZX81 - Zilog Z80A � 3,25 MHz - RAM 1 Ko - ROM 8 Ko :zen:

  3. #3
    Membre du Club
    Homme Profil pro
    Retrait�
    Inscrit en
    Mai 2025
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par d�faut
    Bonjour,
    j'�tudie le contenu de tes fichiers. Je te tiens au courant.
    Merci. Cordialement. Selzig.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 01/02/2016, 12h16
  2. [2.x] besoin d information sur Rest API avec symfony2
    Par ESTYOUNES2008 dans le forum Symfony
    R�ponses: 0
    Dernier message: 18/03/2012, 16h08
  3. [AWS] Faire des recherches sur API Amazon
    Par doudoustephane dans le forum G�n�ral Dotnet
    R�ponses: 0
    Dernier message: 13/11/2011, 00h27
  4. Un moteur de recherche de l'API sur un CMS
    Par Z�bulon-21 dans le forum IGN API G�oportail
    R�ponses: 4
    Dernier message: 18/03/2010, 10h59
  5. A propos des recherches sur l'API Windows
    Par Johannliebert dans le forum Windows
    R�ponses: 2
    Dernier message: 08/07/2007, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo