API REST HTTPPOSTCLOB

RPG (3 et 4, free), CL, SQL, etc...
BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

API REST HTTPPOSTCLOB

Message par BRAUN »

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

nbonnet
Messages : 219
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par nbonnet »

Bonjour Emmanuel

Il existe des fonction HTTP* dans SYSTOOLS et QSYS2. Aujourd'hui il faut utiliser celles de QSYS2.
Ces Api sont sécurisées par une utilisation du protocole SSL
=> Il faut s'assurer que les autorités de certifications correspondantes sont bien présentes dans le magasin *SYSTEM de DCM, sinon les importer
par l'utilisation d'une API Key
=> 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)
et d'un certificat sécurisé
=> cf SSL / TLS
en body également et les réponses seront en retour en JSON
=> 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ées


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

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

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

nbonnet
Messages : 219
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par nbonnet »

Bonjour,

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"}}
Ce qui donnerai :

Code : Tout sélectionner

Myheader = '{"headers":{"Content-Type":"application/json;charset=utf-8", +
"editeur_nom":"TEST", +
"editeur_license":"XXXXXXXXXXXXX"}}';
Nathanaël

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

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 ???

nbonnet
Messages : 219
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par nbonnet »

Vous pouvez poster le code ?
Nathanaël

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

**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
Capture_frs01.JPG
Capture_frs01.JPG (73.37 Kio) Vu 9529 fois
Capture_frs01_body.JPG
Capture_frs01_body.JPG (51.48 Kio) Vu 9529 fois

nbonnet
Messages : 219
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par nbonnet »

Bonjour,

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

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

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
Capture_erreur_json.JPG
Capture_erreur_json.JPG (179.77 Kio) Vu 8699 fois
Peut etre lié à la version?
D'avance merci
Emmanuel

DTrijasson
Messages : 6
Enregistré le : lun. 17 mars 2025, 15:10:52
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par DTrijasson »

Bonjour,

Pour renseigner plusieurs entête, il faut utiliser la balise {headers:{...}}
Avec un s.

Damien

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

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

vazymimil
Messages : 34
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: API REST HTTPPOSTCLOB

Message par vazymimil »

Bonjour,

il manque un " apres dab_ville dans
"deb_ville:"PARIS",+
Nicolas

DTrijasson
Messages : 6
Enregistré le : lun. 17 mars 2025, 15:10:52
Localisation : Lyon

Re: API REST HTTPPOSTCLOB

Message par DTrijasson »

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

BRAUN
Messages : 10
Enregistré le : sam. 26 nov. 2016, 10:36:40
Localisation : Normandie

Re: API REST HTTPPOSTCLOB

Message par BRAUN »

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

vazymimil
Messages : 34
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: API REST HTTPPOSTCLOB

Message par vazymimil »

Bonjour,

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

Répondre