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

API, COM et SDKs Delphi Discussion :

Introduire un "body" dans un GET avec TRestRequest


Sujet :

API, COM et SDKs Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Introduire un "body" dans un GET avec TRestRequest
    Bonjour, nouveau venu sur ce forum, je me présente : Je suis développeur Turbo Pascal 3 ... Heu excusez moi, depuis je suis en Delphi 10.2 ! Bref, ça fait un moment que je pratique.
    Je ne suis pas du tout un spécialiste WEB et j'ai a travailler avec un serveur de client qui utilise un serveur API REST.
    Tout se passe très bien, j'ai utilisé Postman pour vérifier les méthodes de com et pas de problèmes insolubles.
    Sauf qu'ils veulent que je fasse un GET en utilisant un "body" en JSON.
    Avec postman pas de problème mais avec le TRESTREQUEST de delphi, Je n'y arrivais pas du tout sans comprendre la raison :
    En fait, il est écrit en toute lettre dans la doc :
    "Body Parameters :"
    "These parameters consist only of a value and are integrated into the body of the request. They cannot be used for HTTP get or HTTP delete requests since they do not have a body."

    Bref c'est interdit !
    En fouillant dans le code, le body n'est pas traité au moment de l'execute du client avec le commentaire qui va bien.
    En effet dans le code même de TCustomRESTRequest.Execute :

    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
    case self.Method of
            TRESTRequestMethod.rmGET, TRESTRequestMethod.rmDELETE:
              begin
                /// A GET request come without a body, so all relevant params
                /// go into to a query-string .. or maybe to rio (should be nicer)
                DoPrepareQueryString(LParamsList, LURL);
              end;
            TRESTRequestMethod.rmPOST, TRESTRequestMethod.rmPUT, TRESTRequestMethod.rmPATCH:
              begin
                /// POST, PUT  and PATCh requests typically include a body, so all relevant params
                /// go into a body stream.
                /// The body stream has to consider the actual content-type (wwwform vs. multipart)
                /// content.type is only relevant for PUT/POST
                DoPrepareRequestBody(LParamsList, LBodyStream);
                FClient.ContentType := FRequestContentType;
              end;
    Bref
    body interdit pour un GET !

    Pourtant avec postman pas de problème !
    Je peux faire quoi ? réécrire le client ? Me faire ma version perso ? C'est un peu le marteau pilon pour la mouche !
    Il y a peut être une autre bibliothèque qui gère ça ?
    Vous avez une idée ?
    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    alors il est toujours possible de faire n'importe quoi...je veux dire par là que tu peux construire une requête GET et lui coller un Body..mais ça n'a pas lieu d'être en HTTP et en REST non plus théoriquement.

    c'est pour cela que Delphi ne le propose pas.

    Selon Microsoft, mettre un Body sur un GET a un comportement non défini
    https://developer.mozilla.org/en-US/...TP/Methods/GET

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2023
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    alors il est toujours possible de faire n'importe quoi...je veux dire par là que tu peux construire une requête GET et lui coller un Body..mais ça n'a pas lieu d'être en HTTP et en REST non plus théoriquement.

    c'est pour cela que Delphi ne le propose pas.

    Selon Microsoft, mettre un Body sur un GET a un comportement non défini
    https://developer.mozilla.org/en-US/...TP/Methods/GET
    Je comprend bien et je suis complètement d'accord, j'au d'ailleurs fait la même explication à mon client, il y a un incohérence à vouloir mettre un body dans un get ...
    J'espère qu'ils vont le comprendre ...
    Merci !

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

Discussions similaires

  1. [WD20] Restrequete Get avec body
    Par Bwafa dans le forum WinDev
    Réponses: 0
    Dernier message: 16/05/2022, 16h45
  2. Un http get avec le shell...
    Par kitov dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 11/02/2006, 12h34
  3. [HTTPS] Problème de Post et Get avec Apache et SSL
    Par bartrik dans le forum Apache
    Réponses: 5
    Dernier message: 17/09/2004, 08h37

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