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

Delphi Discussion :

Requête HTTP avec REST


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut Requête HTTP avec REST
    Bonjour à tous. j'ai encore une préoccupation.
    j'ai une application qui doit communiquer avec une API d'un fournisseur.
    voici un exemple de données à envoyé par l'API en utilisant la methode post.

    Exemple:

    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    "ifu":"9999900000001",
    "type":"FV",
    "items":[ {
                   "name":"Jus d'orange",
                   "price":1800,
                   "quantity":2,
                   "taxGroup":"B"
                 },
                 {
                   "name":"Lait 1/1 EX",
                   "price":450,
                   "quantity":3,
                   "taxGroup":"A"
                 } ],

    voici la portion de mon code pour les deux première ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FmMCF.RESTClient1.BaseURL:='https://developper.impots.bj/sygmef-emcf/api/invoice';
    FmMCF.RESTRequest1.Params.ParameterByName('Authorization').Value:='clé d''authentification';
    FmMCF.RESTRequest1.Params.ParameterByName('ifu').Value:='1111111111111';
    FmMCF.RESTRequest1.Params.ParameterByName('type').Value:='FV';

  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
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    Je suppose que la question que tu ne poses pas est de savoir comment passer items ?

    Le plus simple est de construire ton tableau d'objets JSON et de le mettre dans items avec un ToJSON.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    de ma bagarre avec PrestaShop j'ai obtenu un truc qui fonctionne
    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
     
    function TDataPrestashop.updatecombinaison(boutique: string;
      id, idprod, mqte: Integer; ean, ref, sku: String): Integer;
    var
      axml: String;
    const
      fxml = '<?xml version="1.0" encoding="UTF-8"?> ' +
        '<prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> ' +
        '<combination> ' + '    <id>%d</id> ' + '    <id_product>%d</id_product> ' +
        '    <reference>%s</reference>' + '    <ean13>%s</ean13> ' +
        '    <supplier_reference>%s</supplier_reference> ' +
        '    <minimal_quantity>%d</minimal_quantity> ' + ' </combination> ' +
        '</prestashop>';
    begin
      RESTClientUpdate.BaseURL := Format('https://%s/api/combinations/%d',
        [boutique, id]);
      axml := Format(fxml, [id, idprod, ref, ean, sku, mqte]);
      RESTUpdate.Params.ParameterByName('body').Value := axml;
      try
      RESTUpdate.Execute;
      { TODO -oOwner -cGeneral : Test résultat = 200 }
      result := RESTResponseUpdate.StatusCode;
    //  if result <> 200 then
    //    showmessage(RESTResponseUpdate.Content);
      except
        result:=400;
      end;
    end;
    cela écrit, bien que j'ai lu que les composants REST gérait mieux les tableaux je n'ai jamais tenté.

    C'est peut-être malgré tout une solution peu "orthodoxe" de faire mais, sur ce schéma il doit être possible de créer un xml adapté à la demande.

    Bon, tout à fait entre nous, j'ai dit que je ne savais/pouvais pas créer des articles dans PrestaShop à partir de mes bases de données, c'est certainement possible en fait mais je ne vais pas me lancer dans cette galère !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par pprem Voir le message
    Bonjour

    Je suppose que la question que tu ne poses pas est de savoir comment passer items ?

    Le plus simple est de construire ton tableau d'objets JSON et de le mettre dans items avec un ToJSON.
    Exactement c'est là mon souci. Comment passer items.
    Comment construire ce tableau d'objets JSON et de le mettre dans items avec un ToJSON?

  5. #5
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    de ma bagarre avec PrestaShop j'ai obtenu un truc qui fonctionne
    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
     
    function TDataPrestashop.updatecombinaison(boutique: string;
      id, idprod, mqte: Integer; ean, ref, sku: String): Integer;
    var
      axml: String;
    const
      fxml = '<?xml version="1.0" encoding="UTF-8"?> ' +
        '<prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> ' +
        '<combination> ' + '    <id>%d</id> ' + '    <id_product>%d</id_product> ' +
        '    <reference>%s</reference>' + '    <ean13>%s</ean13> ' +
        '    <supplier_reference>%s</supplier_reference> ' +
        '    <minimal_quantity>%d</minimal_quantity> ' + ' </combination> ' +
        '</prestashop>';
    begin
      RESTClientUpdate.BaseURL := Format('https://%s/api/combinations/%d',
        [boutique, id]);
      axml := Format(fxml, [id, idprod, ref, ean, sku, mqte]);
      RESTUpdate.Params.ParameterByName('body').Value := axml;
      try
      RESTUpdate.Execute;
      { TODO -oOwner -cGeneral : Test résultat = 200 }
      result := RESTResponseUpdate.StatusCode;
    //  if result <> 200 then
    //    showmessage(RESTResponseUpdate.Content);
      except
        result:=400;
      end;
    end;
    cela écrit, bien que j'ai lu que les composants REST gérait mieux les tableaux je n'ai jamais tenté.

    C'est peut-être malgré tout une solution peu "orthodoxe" de faire mais, sur ce schéma il doit être possible de créer un xml adapté à la demande.

    Bon, tout à fait entre nous, j'ai dit que je ne savais/pouvais pas créer des articles dans PrestaShop à partir de mes bases de données, c'est certainement possible en fait mais je ne vais pas me lancer dans cette galère !
    Merci. j vais aussi m'en inspirer

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 679
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 679
    Points : 13 082
    Points
    13 082
    Par défaut
    Appeler AddBody directement avec en paramètre l'objet JSon.

    Exemple avec tes données :
    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
    var Body := TJSonObject.Create;
     
    try
      Body.AddPair('ifu', '9999900000001');
      Body.AddPair('type', 'FV');
     
      var Item1 := TJSonObject.Create;
      Item1.AddPair('name', 'Jus d''orange');
      Item1.AddPair('price', '1800');
      Item1.AddPair('qty', '2');
      Item1.AddPair('taxGroup', 'B');
     
      var Item2 := TJSonObject.Create;
      Item2.AddPair('name', 'Lait 1/1 EX');
      Item2.AddPair('price', '450');
      Item2.AddPair('qty', '3');
      Item2.AddPair('taxGroup', 'A');
     
      var Items := TJSonArray.Create;
      Items.Add(Item1);
      Items.Add(Item2);
     
      Body.AddPair('Items', Items);
     
      // Pour contrôle
      ShowMessage(Body.Format);
     
      RESTRequest1.AddBody(Body);
      RESTRequest1.Execute;
     
    finally
      Body.Free;
    end;

  7. #7
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Appeler AddBody directement avec en paramètre l'objet JSon.

    Exemple avec tes données :
    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
    var Body := TJSonObject.Create;
     
    try
      Body.AddPair('ifu', '9999900000001');
      Body.AddPair('type', 'FV');
     
      var Item1 := TJSonObject.Create;
      Item1.AddPair('name', 'Jus d''orange');
      Item1.AddPair('price', '1800');
      Item1.AddPair('qty', '2');
      Item1.AddPair('taxGroup', 'B');
     
      var Item2 := TJSonObject.Create;
      Item2.AddPair('name', 'Lait 1/1 EX');
      Item2.AddPair('price', '450');
      Item2.AddPair('qty', '3');
      Item2.AddPair('taxGroup', 'A');
     
      var Items := TJSonArray.Create;
      Items.Add(Item1);
      Items.Add(Item2);
     
      Body.AddPair('Items', Items);
     
      // Pour contrôle
      ShowMessage(Body.Format);
     
      RESTRequest1.AddBody(Body);
      RESTRequest1.Execute;
     
    finally
      Body.Free;
    end;
    D'accord...! Merci beaucoup.

    Je vais l’appliquer et j vous ferais le retour en cas de soucis

  8. #8
    Membre à l'essai
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonsoir à tous. c'est résolu. grâce à l'exemple de Andnotor.

    merci à vous tous (Andnotor, SergioMaster, pprem) pour vos contributions et promptitudes remarquables

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

Discussions similaires

  1. Script de requêtes HTTP avec paramètre en boucle
    Par padsalad dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2009, 16h46
  2. Script de requêtes HTTP avec paramètre en boucle
    Par padsalad dans le forum Autres
    Réponses: 0
    Dernier message: 29/06/2009, 11h32
  3. Requête http avec retour XML
    Par safisafi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/05/2009, 15h55
  4. Problème requête HTTP avec caméra IP
    Par Sleeping Lionheart dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 28/02/2009, 21h25
  5. Faire une requête https avec une application Delphi 7
    Par davidkungfu dans le forum Web & réseau
    Réponses: 12
    Dernier message: 10/04/2008, 10h39

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