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

Web & réseau Delphi Discussion :

REST, obtention de données


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut REST, obtention de données
    Bonjour,

    jusqu'à présent je passais par REST debugger (créant ainsi les composants identificateur,client,request,response,datasetadapter et table mémoire)
    ce qui est très bien quand on veut récupérer une table entière ou quand on est sûr d'avoir des données.

    Il s'avère que cette fois je fais une requête qui peut ne pas renvoyer de données et, ma question, je me demande comment gérer ça.

    En effet, si j'utilise ma démarche "classique" et que la requête ne fourni aucun résultat j'ai une erreur d'interprétation (logique)
    je m'en sors en utilisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     try
      RestRequest.Params.ParameterByIndex(0).Value:='mavaleur';  
      RestRequest.Execute;
      // suite du code 
    except
       // pas d'enregistrement
    end;
    mais je pense qu'il y a mieux. Je me trompe ?

    Dans le même ordre d'idée, j'ai eu la surprise d'avoir des doublons dans la base de données interrogée (encore une fois je vais jouer de la dans les services il y en a qui prenne la base pour une poubelle !). Bon, bien sûr je peux utiliser le recordcount de la table mémoire pour détecter ces doublons mais il y a peut-être plus rapide ?

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour Serge

    Si tu n'as pas besoin de l'architecture des composants TRESTxxx, tu peux passer directement par les classes THTTPClient et THTTPRequest ou les composants correspondants si tu préfères avoir des composants.

    Regarde ce que j'avais fait sur CCTRB (https://github.com/DeveloppeurPascal...cing-RestauBar) ou l'API de DeepL (https://github.com/DeveloppeurPascal...-Delphi-client).

    Exemple lors de la récupération de la liste des établissements sur CCTRB :

    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
    function API_ListeTypeEtablissements: TFDMemtable;
    var
      serveur: thttpclient;
      reponse: ihttpresponse;
      jsa: tjsonarray;
      jso: tjsonobject;
      jsv: tjsonvalue;
      id: integer;
      libelle: string;
    begin
      result := TFDMemtable.Create(nil);
      result.FieldDefs.Add('id', tfieldtype.ftInteger);
      result.FieldDefs.Add('label', tfieldtype.ftString, 100);
      result.open;
      serveur := thttpclient.Create;
      try
        try
          reponse := serveur.get(getAPIURL('types'));
          if (reponse.StatusCode = 200) then
          begin
            try
              jsa := tjsonobject.ParseJSONValue(reponse.ContentAsString)
                as tjsonarray;
            except
              jsa := tjsonarray.Create;
            end;
            if assigned(jsa) then
            begin
              for jsv in jsa do
                try
                  jso := jsv as tjsonobject;
                  try
                    id := (jso.GetValue('id') as tjsonnumber).AsInt;
                    try
                      libelle := (jso.GetValue('label') as TJSONString).Value;
                      result.Insert;
                      result.FieldByName('id').AsInteger := id;
                      result.FieldByName('label').Asstring := libelle;
                      result.post;
                    except
     
                    end;
                  except
     
                  end;
                except
     
                end;
              jsa.free;
            end;
          end;
        except
     
        end;
      finally
        serveur.free;
      end;
    end;

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut
    Justement, j'y pensais ce matin en me branchant sur ta chaine Twitch. Je vais plutôt regarder le lien DeepL. Je ne sais pas si cela va correspondre à ma problématique, c'est quand même un cas bien particulier que ce "Ok c'est bon tu as ta réponse" reponse.StatusCode = 200 "mais j'ai rien à te montrer"

  4. #4
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Si le serveur dit 200, c'est qu'il a fait son job en fonction de ce que tu lui as renvoyé. Donc contenu en sortir ou pas, tu te dois de l'en remercier.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 624
    Billets dans le blog
    65
    Par défaut
    Je l'en remercie, c'est l'utilisateur qui a "oublié/omis" de remplir les données que je ne remercie pas.

    Je pense qu'il y a certainement un des composants (sur les 4 il serait étonnant que non) qui doit être adapté à ce truc, mieux que l'exception levée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'obtention de données a partir d'un tableau structuré
    Par ChristianBosch dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/05/2021, 11h56
  2. Rest-assured / API REST : Difficulté exploitation données reçues
    Par solstyce39 dans le forum Général Java
    Réponses: 0
    Dernier message: 16/11/2018, 13h21
  3. Réponses: 2
    Dernier message: 29/07/2017, 13h46
  4. Hibernate et données resté en cache
    Par matech dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/03/2009, 17h48
  5. Réponses: 2
    Dernier message: 22/02/2008, 14h20

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