API REST HTTPPOSTCLOB
API REST HTTPPOSTCLOB
Bonjour
je dois faire des programmes RPG pour appeler des API REST en POST et en GET... Ces Api sont sécurisées par une utilisation du protocole SSL , par l'utilisation d'une API Key et d'un certificat sécurisé J'aurais des infos en Header à renseigner , en body également et les réponses seront en retour en JSON ..
Quelqu'un a t'il déja fait des programmes pour ce type d'Api par l'utilisation des HTTPPOSTCLOb et HTTPGETCLOB et si il y avait des exemples , ca m'arrangerait beaucoup.
merci d'avance
Emmanuel
je dois faire des programmes RPG pour appeler des API REST en POST et en GET... Ces Api sont sécurisées par une utilisation du protocole SSL , par l'utilisation d'une API Key et d'un certificat sécurisé J'aurais des infos en Header à renseigner , en body également et les réponses seront en retour en JSON ..
Quelqu'un a t'il déja fait des programmes pour ce type d'Api par l'utilisation des HTTPPOSTCLOb et HTTPGETCLOB et si il y avait des exemples , ca m'arrangerait beaucoup.
merci d'avance
Emmanuel
Re: API REST HTTPPOSTCLOB
Bonjour Emmanuel
Il existe des fonction HTTP* dans SYSTOOLS et QSYS2. Aujourd'hui il faut utiliser celles de QSYS2.
Quelques exemples / documentations :
https://www.gaia.fr/lappel-dapi-de-trad ... sur-ibm-i/
https://www.youtube.com/watch?v=RFxrKn3vV3M
https://www.linkedin.com/pulse/db2-http ... son-4bnfe/
https://www.scottklement.com/presentati ... %20RPG.pdf
https://www.ibm.com/support/pages/new-h ... ased-qsys2
Il existe des fonction HTTP* dans SYSTOOLS et QSYS2. Aujourd'hui il faut utiliser celles de QSYS2.
=> Il faut s'assurer que les autorités de certifications correspondantes sont bien présentes dans le magasin *SYSTEM de DCM, sinon les importerCes Api sont sécurisées par une utilisation du protocole SSL
=> C'est une valeur à ajouter dans l'entête HTTP (la plupart du temps, mais cela peut aussi être dans le body, cf la documentation de l'API)par l'utilisation d'une API Key
=> cf SSL / TLSet d'un certificat sécurisé
=> on a toutes les fonctions SQL JSON* pour préparer les données à envoyer ou exploiter les données reçues en retour. Bien sur cela dépend du format des donnéesen body également et les réponses seront en retour en JSON
Quelques exemples / documentations :
https://www.gaia.fr/lappel-dapi-de-trad ... sur-ibm-i/
https://www.youtube.com/watch?v=RFxrKn3vV3M
https://www.linkedin.com/pulse/db2-http ... son-4bnfe/
https://www.scottklement.com/presentati ... %20RPG.pdf
https://www.ibm.com/support/pages/new-h ... ased-qsys2
Nathanaël
Re: API REST HTTPPOSTCLOB
Bonjour Nathanael
Sur le HTTp_POST , ca me plante avec ce message
ID message . . . . . . : CPF503E Gravité . . . . . . . : 30
Type de message . . . : Copie expéditeur
Date d'envoi . . . . . : 26/03/25 Heure d'envoi . . . . : 13:50:49
Message . . . . : Erreur de fonction définie par l'utilisateur sur le membre
QSQPTABL.
Cause . . . . . : Une erreur s'est produite lors de l'appel de la fonction
HTTP_POST_VERBOSE définie par l'utilisateur dans la bibliothèque QSYS2.
L'erreur s'est produite lors de l'appel du programme externe ou du programme
de service QSQAXISC associé de la bibliothèque QSYS, point d'entrée de
programme ou nom externe axiscPostClobVerbose, nom spécifique HTTP_POSTV.
L'erreur s'est produite sur le membre QSQPTABL du fichier QSQPTABL dans la
bibliothèque QSYS2. Le code d'erreur correspondant est 1. Lea signification
des codes d'erreur est fournie ci-après.
1 -- Le programme externe ou le programme de service a renvoyé SQLSTATE
38501. Le message renvoyé par le programme est : ERROR : INVALID PROPERTY :
editeur_nom.
2 Le pgm externe a échoué.
3 -- Le délai d'attente a été dépassé pour la base de données lors de
l'attente d'une réponse par le programme. La valeur de dépassement de délai
J'ai un doute sur ma syntaxe du Header dans le HTTP_POST ..
MyURL = 'https://pp-sdr-esn.cncj-ws.fr/cjs/add_file';
Mymessage = '{ "iddeb" : "127", "idcdp" : "CDP-2025-00137"}';
Myheader = '{"header":"Content-Type,application/json;charset=utf-8", +
"editeur_nom":"TEST", +
"editeur_license":"XXXXXXXXXXXXX", +
"serial_rescom":"XXXXXX", +
"id_office":"9000", +
"titre_num":"222", +
"titre_libelle":"libelle titre", +
"titre_date":"20240101", +
"titre_fondement":"FP1", +
"titre_emet":"CNCJ", +
"titre_ville":"Paris", +
"titre_pays":"FR"}';
Exec sql
values qsys2.http_post(
:myurl,
:myMessage,
:Myheader
) into :response;
Sur postman cette requete fonctionne et dans le header j'ai ceci
Key Values
editeur_nom TEST
editeur_license XXXXX
etc etc
Donc pourquoi ce message INVALID PROPERTY : editeur_nom ?????
Avez vous une idée?
Merci d'avance
Emmanuel
Sur le HTTp_POST , ca me plante avec ce message
ID message . . . . . . : CPF503E Gravité . . . . . . . : 30
Type de message . . . : Copie expéditeur
Date d'envoi . . . . . : 26/03/25 Heure d'envoi . . . . : 13:50:49
Message . . . . : Erreur de fonction définie par l'utilisateur sur le membre
QSQPTABL.
Cause . . . . . : Une erreur s'est produite lors de l'appel de la fonction
HTTP_POST_VERBOSE définie par l'utilisateur dans la bibliothèque QSYS2.
L'erreur s'est produite lors de l'appel du programme externe ou du programme
de service QSQAXISC associé de la bibliothèque QSYS, point d'entrée de
programme ou nom externe axiscPostClobVerbose, nom spécifique HTTP_POSTV.
L'erreur s'est produite sur le membre QSQPTABL du fichier QSQPTABL dans la
bibliothèque QSYS2. Le code d'erreur correspondant est 1. Lea signification
des codes d'erreur est fournie ci-après.
1 -- Le programme externe ou le programme de service a renvoyé SQLSTATE
38501. Le message renvoyé par le programme est : ERROR : INVALID PROPERTY :
editeur_nom.
2 Le pgm externe a échoué.
3 -- Le délai d'attente a été dépassé pour la base de données lors de
l'attente d'une réponse par le programme. La valeur de dépassement de délai
J'ai un doute sur ma syntaxe du Header dans le HTTP_POST ..
MyURL = 'https://pp-sdr-esn.cncj-ws.fr/cjs/add_file';
Mymessage = '{ "iddeb" : "127", "idcdp" : "CDP-2025-00137"}';
Myheader = '{"header":"Content-Type,application/json;charset=utf-8", +
"editeur_nom":"TEST", +
"editeur_license":"XXXXXXXXXXXXX", +
"serial_rescom":"XXXXXX", +
"id_office":"9000", +
"titre_num":"222", +
"titre_libelle":"libelle titre", +
"titre_date":"20240101", +
"titre_fondement":"FP1", +
"titre_emet":"CNCJ", +
"titre_ville":"Paris", +
"titre_pays":"FR"}';
Exec sql
values qsys2.http_post(
:myurl,
:myMessage,
:Myheader
) into :response;
Sur postman cette requete fonctionne et dans le header j'ai ceci
Key Values
editeur_nom TEST
editeur_license XXXXX
etc etc
Donc pourquoi ce message INVALID PROPERTY : editeur_nom ?????
Avez vous une idée?
Merci d'avance
Emmanuel
Re: API REST HTTPPOSTCLOB
Bonjour,
la doc https://www.ibm.com/docs/en/i/7.5?topic ... TP_options indique la syntaxe suivante pour les headers HTTP :
Ce qui donnerai :
la doc https://www.ibm.com/docs/en/i/7.5?topic ... TP_options indique la syntaxe suivante pour les headers HTTP :
Code : Tout sélectionner
{"headers":{"User-Agent":"IBM i HTTP function"}}
Code : Tout sélectionner
Myheader = '{"headers":{"Content-Type":"application/json;charset=utf-8", +
"editeur_nom":"TEST", +
"editeur_license":"XXXXXXXXXXXXX"}}';
Nathanaël
Re: API REST HTTPPOSTCLOB
Merci Nathanael
en effet ca corrige cette erreur d'INVALID PROPERTY mais ca serait trop simple si ca fonctionnait.
maintenant j'ai toujours le SQLSTATE 38501 mais avec ERROR : INVALID JSON OPTION AT OFFSET 1 reason:-4.
ce qui me laisse perplexe ???
en effet ca corrige cette erreur d'INVALID PROPERTY mais ca serait trop simple si ca fonctionnait.
maintenant j'ai toujours le SQLSTATE 38501 mais avec ERROR : INVALID JSON OPTION AT OFFSET 1 reason:-4.
ce qui me laisse perplexe ???
Re: API REST HTTPPOSTCLOB
**FREE
ctl-opt main(main) DftActGrp(*No) actgrp(*caller);
dcl-proc main;
dcl-s myURL varchar(10000);
dcl-s myMessage varchar(10000);
dcl-s myheader varchar(10000);
dcl-s response varchar(10000);
dcl-ds table qualified;
responsemsg varchar(10000);
responsehttpheader varchar(10000);
end-ds;
MyURL = 'https://pp-sdr-esn.cncj-ws.fr/cjs/add_file';
Mymessage = '{ "iddeb" : "127", "idcdp" : "CDP-2025-00137"}';
Myheader = '{"header":{"Content-Type,application/json;charset=utf-8",+
"editeur_nom":"TEST",+
"editeur_license":"D22H-338F-4AD6-84H6-BD99",+
"serial_rescom":"4400000911cef37d7607",+
"id_office":"9000",+
"titre_num":"222",+
"titre_libelle":"libelle titre",+
"titre_date":"20240101",+
"titre_fondement":"FP1",+
"titre_emet":"CNCJ",+
"titre_ville":"Paris",+
"titre_pays":"FR"}}';
Exec sql
values qsys2.http_post(
:myurl,
:myMessage,
:Myheader
) into :response;
snd-msg response;
Exec sql
select * into :table from table(qsys2.http_post_verbose(
:myurl,
:myMessage,
:Myheader
));
snd-msg table.responsemsg;
end-proc;
et dans postman on a le header et body comme fichiers joints
ctl-opt main(main) DftActGrp(*No) actgrp(*caller);
dcl-proc main;
dcl-s myURL varchar(10000);
dcl-s myMessage varchar(10000);
dcl-s myheader varchar(10000);
dcl-s response varchar(10000);
dcl-ds table qualified;
responsemsg varchar(10000);
responsehttpheader varchar(10000);
end-ds;
MyURL = 'https://pp-sdr-esn.cncj-ws.fr/cjs/add_file';
Mymessage = '{ "iddeb" : "127", "idcdp" : "CDP-2025-00137"}';
Myheader = '{"header":{"Content-Type,application/json;charset=utf-8",+
"editeur_nom":"TEST",+
"editeur_license":"D22H-338F-4AD6-84H6-BD99",+
"serial_rescom":"4400000911cef37d7607",+
"id_office":"9000",+
"titre_num":"222",+
"titre_libelle":"libelle titre",+
"titre_date":"20240101",+
"titre_fondement":"FP1",+
"titre_emet":"CNCJ",+
"titre_ville":"Paris",+
"titre_pays":"FR"}}';
Exec sql
values qsys2.http_post(
:myurl,
:myMessage,
:Myheader
) into :response;
snd-msg response;
Exec sql
select * into :table from table(qsys2.http_post_verbose(
:myurl,
:myMessage,
:Myheader
));
snd-msg table.responsemsg;
end-proc;
et dans postman on a le header et body comme fichiers joints
Re: API REST HTTPPOSTCLOB
Bonjour,
erreur de syntaxe sur le premier entête :
erreur de syntaxe sur le premier entête :
Code : Tout sélectionner
Myheader = '{"header":{"Content-Type,application/json;charset=utf-8",+
Myheader = '{"header":{"Content-Type":"application/json;charset=utf-8",+
Nathanaël
Re: API REST HTTPPOSTCLOB
Bonjour
merci
J'ai corrigé juste la ligne Content-Type
mais ca ne passe toujours pas.. Maintenant j'ai ERROR :OPTION NOT JSON
Je suis en V7R3M0 Peut etre lié à la version?
D'avance merci
Emmanuel
merci
J'ai corrigé juste la ligne Content-Type
mais ca ne passe toujours pas.. Maintenant j'ai ERROR :OPTION NOT JSON
Je suis en V7R3M0 Peut etre lié à la version?
D'avance merci
Emmanuel
-
- Messages : 6
- Enregistré le : lun. 17 mars 2025, 15:10:52
- Localisation : Lyon
Re: API REST HTTPPOSTCLOB
Bonjour,
Pour renseigner plusieurs entête, il faut utiliser la balise {headers:{...}}
Avec un s.
Damien
Pour renseigner plusieurs entête, il faut utiliser la balise {headers:{...}}
Avec un s.
Damien
Re: API REST HTTPPOSTCLOB
Bonjour Damien
en fait meme souci avec headers avec un s
là j'ai fait programme avec GET sur une autre URL et meme souci erreur SQLSTATE 38501 ERROR / INVALID JSON
**FREE
ctl-opt main(main) DftActGrp(*No) actgrp(*caller);
dcl-proc main;
dcl-s myURL varchar(10000);
dcl-s myheader varchar(10000);
dcl-s response varchar(10000);
dcl-ds table qualified;
responsemsg varchar(10000);
responsehttpheader varchar(10000);
end-ds;
MyURL = 'https://pp2-sdr-esn.cncj-ws.fr/cjs/search_debtor';
Myheader = '{"headers":{ +
"Content-Type":"application/json;charset=utf-8",+
"editeur_nom":"TEST",+
"editeur_license":"D22H-338F-4AD6-84H6-BD99",+
"serial_rescom":"4400000911cef37d7607",+
"id_office":"9000",+
"titre_num":"222",+
"titre_libelle":"libelle titre",+
"titre_date":"20240101",+
"titre_fondement":"FP1",+
"titre_emet":"CNCJ",+
"titre_ville":"Paris",+
"titre_pays":"FR",+
"deb_nom":"NIMO",+
"deb_prenom":"JEROME",+
"deb_lieunai":"",+
"deb_codpos":"00000",+
"deb_ville:"PARIS",+
"deb_codcom":"75000"}}';
Exec sql
values qsys2.http_get(
:myurl,
:Myheader
) into :response;
snd-msg response;
end-proc;
Pb de syntaxe ?? autre chose
si tu as une idée elle serait bienvenu
merci
Emmanuel
en fait meme souci avec headers avec un s
là j'ai fait programme avec GET sur une autre URL et meme souci erreur SQLSTATE 38501 ERROR / INVALID JSON
**FREE
ctl-opt main(main) DftActGrp(*No) actgrp(*caller);
dcl-proc main;
dcl-s myURL varchar(10000);
dcl-s myheader varchar(10000);
dcl-s response varchar(10000);
dcl-ds table qualified;
responsemsg varchar(10000);
responsehttpheader varchar(10000);
end-ds;
MyURL = 'https://pp2-sdr-esn.cncj-ws.fr/cjs/search_debtor';
Myheader = '{"headers":{ +
"Content-Type":"application/json;charset=utf-8",+
"editeur_nom":"TEST",+
"editeur_license":"D22H-338F-4AD6-84H6-BD99",+
"serial_rescom":"4400000911cef37d7607",+
"id_office":"9000",+
"titre_num":"222",+
"titre_libelle":"libelle titre",+
"titre_date":"20240101",+
"titre_fondement":"FP1",+
"titre_emet":"CNCJ",+
"titre_ville":"Paris",+
"titre_pays":"FR",+
"deb_nom":"NIMO",+
"deb_prenom":"JEROME",+
"deb_lieunai":"",+
"deb_codpos":"00000",+
"deb_ville:"PARIS",+
"deb_codcom":"75000"}}';
Exec sql
values qsys2.http_get(
:myurl,
:Myheader
) into :response;
snd-msg response;
end-proc;
Pb de syntaxe ?? autre chose
si tu as une idée elle serait bienvenu
merci
Emmanuel
-
- Messages : 6
- Enregistré le : lun. 17 mars 2025, 15:10:52
- Localisation : Lyon
Re: API REST HTTPPOSTCLOB
Bonjour Emmanuel,
Comme Nicolas, le " après deb_ville.
J'enlèverai aussi le blanc sur la première ligne, juste avnat le plus : { + --> {+
Et enfin vu la taille de tes variables, je ferai un trim Myurl et Myheader dans l'exec sql :
Exec sql
values qsys2.http_get(
trim(:myurl),
trim(:Myheader)
) into :response;
Damien
Comme Nicolas, le " après deb_ville.
J'enlèverai aussi le blanc sur la première ligne, juste avnat le plus : { + --> {+
Et enfin vu la taille de tes variables, je ferai un trim Myurl et Myheader dans l'exec sql :
Exec sql
values qsys2.http_get(
trim(:myurl),
trim(:Myheader)
) into :response;
Damien
Re: API REST HTTPPOSTCLOB
Bonjour damien
merci pour ta réponse. malheureusement quand je corrige ses petits points, j'ai toujours la meme erreur
INVALID JSON OPTION AT OFFSET 1 reason:-4.
aurais tu la possibilité de tester , toi, ce programme sur ton ibm i ??
merci
Emmanuel
merci pour ta réponse. malheureusement quand je corrige ses petits points, j'ai toujours la meme erreur
INVALID JSON OPTION AT OFFSET 1 reason:-4.
aurais tu la possibilité de tester , toi, ce programme sur ton ibm i ??
merci
Emmanuel
Re: API REST HTTPPOSTCLOB
Bonjour,
J'ai testé dans pub400.com en ne changeant que "deb_ville"
La chose retourne dans response ceci
Donnees d'identification incorrectes
J'ai testé dans pub400.com en ne changeant que "deb_ville"
La chose retourne dans response ceci
Donnees d'identification incorrectes
Code : Tout sélectionner
**FREE
ctl-opt main(main) DftActGrp(*No) actgrp(*caller);
dcl-proc main;
dcl-s myURL varchar(10000);
dcl-s myheader varchar(10000);
dcl-s response varchar(10000);
dcl-ds table qualified;
responsemsg varchar(10000);
responsehttpheader varchar(10000);
end-ds;
MyURL = 'https://pp2-sdr-esn.cncj-ws.fr/cjs/search_debtor';
Myheader = '{"headers":{ +
"Content-Type":"application/json;charset=utf-8",+
"editeur_nom":"TEST",+
"editeur_license":"D22H-338F-4AD6-84H6-BD99",+
"serial_rescom":"4400000911cef37d7607",+
"id_office":"9000",+
"titre_num":"222",+
"titre_libelle":"libelle titre",+
"titre_date":"20240101",+
"titre_fondement":"FP1",+
"titre_emet":"CNCJ",+
"titre_ville":"Paris",+
"titre_pays":"FR",+
"deb_nom":"NIMO",+
"deb_prenom":"JEROME",+
"deb_lieunai":"",+
"deb_codpos":"00000",+
"deb_ville":"PARIS",+
"deb_codcom":"75000"}}';
Exec sql
values qsys2.http_get(
:myurl,
:Myheader
) into :response;
snd-msg response;
end-proc;
Nicolas