Volubis, le forum IBM i Index du Forum Volubis, le forum IBM i
avec les clubs Informatiques IPL et Bretagne.
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

web service REST et format retour JSON

 
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> Web
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
thomas.barberot



Inscrit le: 12 Avr 2012
Messages: 25

MessagePosté le: Jeu 06 Déc 2018, 16:00:10    Sujet du message: web service REST et format retour JSON Répondre en citant

Bonjour.
J'ai déployé un *SRVPGM sous forme de web service REST. sur les méthodes, j'ai indiqué un "Returned output media type" à "*XML_AND_JSON".
Dans "request information", dans la partie "HTTP Headers", j'ai ajouté la valeur "CONTENT-TYPE".

D'après ce qui est écrit ici, il faut fixer la variable d'environnement "CONTENT_TYPE" pour indiquer le format voulu.

J'ai donc fait le code suivant afin de récupérer la valeur du header content-type pour alimenter la variable d'environnement avec :
Code:

dcl-pr GetEnvVar extproc('QtmhGetEnv');
 *n char(100);
 *n int(10) const;
 *n int(10);
 *n char(100) const;
 *n int(10) const;
 *n char(100);
end-pr;

dcl-pr PutEnvVar extproc('QtmhPutEnv');
 *n char(100);
 *n int(10) const;
 *n char(100);
end-pr;

dcl-s lRetour char(100) inz;
dcl-s lRetourLen int(10) inz;
dcl-s lErreurApi char(100) inz;
dcl-s lString char(100) inz;

GetEnvVar(lRetour:%len(lRetour):lRetourLen:'HTTP_CONTENT-TYPE':17:lErreurApi);
lString = 'CONTENT_TYPE=' + %trim(lRetour);
PutEnvVar(lString:%len(lString):lErreurApi);


Je récupère bien la variable d'environnement HTTP_CONTENT-TYPE, je mets bien "application/json" dans la variable CONTENT_TYPE, et pourtant, le service renvoie du XML.

Si je force "Returned output media type" à "*JSON" au déploiement du service, j'ai bien du JSON en retour (c'était pour être sûr).

Que me manque-t'il pour avoir, au choix, du XML ou du JSON ?
Merci.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 658
Localisation: Nantes

MessagePosté le: Jeu 06 Déc 2018, 17:21:19    Sujet du message: accept Répondre en citant

Content_type permet au serveur de d'indiquer dynamiquement le format qu'il retourne (CSV ou HTML, par exemple).

quand le serveur prévoit *XML_AND_JSON, c'est au client de dire ce qu'il préfère par le biais de "Accept"

https://httpd.apache.org/docs/2.2/fr/content-negotiation.html
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
thomas.barberot



Inscrit le: 12 Avr 2012
Messages: 25

MessagePosté le: Ven 07 Déc 2018, 09:06:26    Sujet du message: (sujet inconnu) Répondre en citant

J'ai modifié le web service pour n'avoir que "accept" dans la liste des HTTP headers, je n'ai plus de gestion de variable d'environnement dans le RPG (plus de getenv, plus de putenv), et ça fonctionne bien (xml ou json selon la valeuur passé en header dans "accept").

Du coup, je ne comprends pas dans quel cas il faut appliquer ce que vous écrivez sur votre tuto :
Citation:
Avec SI56883, vous pouvez préciser plusieurs types de média en retour et le type est libre (text/html, par ex.). Il faut alors fixer la variable d'environnement CONTENT_TYPE pour préciser dynamiquement le type retourné à chaque appel.


Et est-ce que cela fait doublon avec le paramètre (optionnel) contenant la liste des header ? Si oui, quelle est la solution à privilégier (variable d'environnement ou paramètre) ?

Merci.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
nbonnet



Inscrit le: 11 Sep 2018
Messages: 9
Localisation: Lyon

MessagePosté le: Ven 07 Déc 2018, 11:43:18    Sujet du message: (sujet inconnu) Répondre en citant

Salut Thomas,

Il est possible de contrôler dynamiquement le type de contenu retourné par un service web. Cela nécessite un paramètre supplémentaire au programme/procédure permettant d'injecter des entêtes HTTP dans la réponse, et il faut avoir indiqué au déploiement les types possibles.

un exemple ici :
https://www.gaia.fr/retourner-des-documents-grace-aux-web-services/

a+
_________________
Nathanaël
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots