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

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2025
    Messages
    6
    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 : 6
    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 : 52
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

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