Question dév Web service [Résolu/Fermé]

Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Hello chères et chers collègues,

Après d'innombrables recherches sur la toile, sans résultat satisfaisant ; je m'en remets à vous.
Je développe un projet sur lequel un client (page HTML5/CSS3) communique avec un serveur qui lui retournera des résultats sous forme de liste.
J'ai donc pensé à faire un web service.
Comme je ne m'y connais pas trop, je me suis dirigé vers le web service REST (je fais uniquement du HTTP) + JSON que je développerai en python avec JQuery et web.py.

Déjà, que pensez-vous de ces choix ? Je fais fausse route ?

Pour le moment, je lance mon script python sur Windows (oui, :-/) sur le port 8081 (adresse : http://127.0.0.1:8081/test) qui semble fonctionner puisqu'en accédant avec le navigateur sur Chrome + Firefox + IE, j'obtiens bien un texte en retour (les listes JSON seront la prochaine étape).

Ensuite, je tente de récupérer le texte via Xmlhttprequest (pour JQuery, ça ne fonctionne pas non plus) avec :

function test() {
  var xhr_object = null;
  if(window.XMLHttpRequest) {// Firefox
     xhr_object = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) { // Internet Explorer
     xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
  }
   
  xhr_object.open(method, "http://127.0.0.1:8081/test", true);
  xhr_object.send(null);
  xhr_object.onreadystatechange = function() {
     if(xhr_object.readyState == 4) {
        alert(xhr_object.status + ": " + xhr_object.responseText);
     }
  }

 }

Quand je lance la page html depuis mon navigateur IE, je récupère bien le message voulu le statut 200 alors qu'avec Chrome ou Firefox, j'obtiens le statut 0 et xhr_objet.responseText ne me renvoie rien. Pourtant les logs de mon script python m'indique bien "200 OK".

Y a-t-il un truc qui m'échappe ? Une sécurité dans les navigateurs empêchant le web service ?

Merci aux courageux qui sont arrivés jusque là :-).
Google is your friend
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1603
1
Merci
Un WS c'est essentiellement pour une communication machine à machine, pas de machine à navigateur web.
Yep. Mais on est d'accord que le WS permet bien via Ajax notamment de récupérer des informations sur un serveur à partir d'un navigateur ?

Pour Zend Framework, c'est plutôt pour du PHP non ?
J'aurais préféré rester avec web.py. Peut-être que je changerai pour Django (il y a plus d'ouvrages). Mais là, je ne pense pas que mon problème se situe au niveau du serveur puisque les navigateurs récupèrent bien les datas via GET.
En revanche, avec Xmlhttprequest en javascript, je n'arrive pas à récupérer ces datas pour Firefox et Chrome (cela fonctionne bien avec IE)...
Vois-tu d'où cela peut venir ?

Cdlt,

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64154 internautes nous ont dit merci ce mois-ci

mpmp93
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1218 -
Xmlhttprequest récupère du XML.

Il faut récupérer le flux XML généré coté serveur et voir s'il est bien formé.
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1603 -
Xmlhttprequest récupère du XML.
Comme son nom ne l'indique pas, c'est un objet qui permet de récupérer du XML, mais aussi du HTML et aussi du JSON (c'est ce que je souhaite faire).
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1218
0
Merci
Bonjour,

Un WS c'est essentiellement pour une communication machine à machine, pas de machine à navigateur web.

Le choix d'un WS REST est bon. Ici comment faire un WS REST avec Zend Framework:
http://html5.immo-scope.com/article/webservices_WsRestFullViaZendFramework

A+
Messages postés
611
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
36
0
Merci
Salut @fiddy
Je vais essayer de t'aider du mieux que je peux ceci dit quant au choix de l'architecture sans trop m'avancer il est correct personnellement j'utiliserais du AJAX vue aussi que tu développes sous Windows et en complément Javascript comme ce que tu as fait et c'est peut-être ce qui a de mieux à faire mais si tu te sans à l'aise en python oui pourquoi pas.
Le zéro ne fournit aucune réponse significative enfin du moins mais il est pratique pour les tester en local il est correct comme tu as dû déduire que tout c'est bien passer là où pourraient y avoir des problèmes c'est l'instance des objets et le traitement des données reçut, et comme c'est un projet en développement je te conseille d'effectuer des teste afin de savoir si tes instances en bien été traiter et par la suite te concentrer sur l'extraction des données en utilisant le DOM pour le XML vue que c'est ce que tu fais.

Avant de repartir sur la base de ton code peux-tu nous dire si ta variable nommée méthode est dynamique elle peut prendre deux état "POST" ou "GET" ?.

j'ai essayé de faire simple en utilisant des exceptions pour les objets et c'est ce qui est le plus utiliser vue que les navigateurs ont différentes versions.
la prise en compte des différents états de réponse et enfin pour tout le reste c'est que du traitement du résultat obtenus.

Voici les légères modifications que j'ai apportés et comme tu es sur Windows peut-être que ce lien pourras t'aider http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx
function f_Test(){
 
 var xhr_object = null;
 
 //instance 
 if(window.XMLHttpRequest || window.ActiveXObject) {
  if(window.XMLHttpRequest) {
   xhr_object = new XMLHttpRequest(); 
  }else{
   //Exception
   try{ xhr_object = new ActiveXObject("Msxml2.XMLHTTP"); } 
   catch( expt ){ 
    xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   }
  }
 }
 else{
  alert("Navig gère pas l'objet XMLHTTPRequest actuel");
  return;
 }
 
 /***
 * Envoie des donnée et traitement
 ***/
 xhr_object.open("GET", "http://127.0.0.1:8081/test", true);
   xhr_object.send(null);
   
   /***
   * Réponse
   ***/
   xhr_object.onreadystatechange = function() {
    if( ( xhr_object.readyState == 4 ) && ( xhr_object.status == 200 || xhr_object.status == 0 ) ) {
              alert(xhr_object.status + ": " + xhr_object.responseText); 
              // ou DOM en créant une fonction de traitement 
                 }
        }
  
  //Fin de Fonction test
}

à bientôt
Messages postés
611
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
36
0
Merci
Bonjour
@mpmp93:Un WS c'est essentiellement pour une communication machine à machine, pas de machine à navigateur web.

Non ce n'est pas le principe et sont rôle est erroné vue l'argument.
Les web service sont dédiés à faciliter l'interconnexion des applications et elle est utilisée majoritairement dans 4 domaines bien distincts pour:

Interconnecter des plates-formes hétérogènes.
intégrer des applications existantes.
une architecture Client / serveur sur Internet.
fournir des services à forte valeur ajoutée métier.


Et le schéma architectural utiliser dans le cas de @fiddy est celui d'un Client / serveur sur Internet

à bientôt
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1603
0
Merci
D'acc, je vais tester ça ce soir. Bizarre que le code soit différent sur Windows. Je pensais que le Javascript permettait cette abstraction. Enfin,je teste ce soir :-).

est correct personnellement j'utiliserais du AJAX vue aussi que tu développes sous Windows
Oui oui, j'utilise AJAX (notamment via le JQuery).
Les contrôles d'instanciation sont gérés par mon JQuery :-). Mais là, je me suis mis en mode configuration minimale pour localiser l'erreur.
Vu que IE fonctionne, mais pas firefox, je dirai plutôt que le problème se trouve au niveau de : xhr_object = new XMLHttpRequest(); ou de la suite. Ou peut-être un problème de paramétrage par défaut au sein du navigateur ?

Pour l'instant j'ai fait une fonction pour intercepter le GET. Mais après, je n'utiliserai que le POST.
Messages postés
611
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
36
0
Merci
Bonsoir
Pour le navigateur pas si sûr que cela vient de lui essaye de vider le cache et vérifier les paramètres mais pour ce qui est l'instance peut-être mais je pense que cela est bien plus après l'instance de l'objet comme tu le dis.
As-tu apporté les modifications et testé le résultat ?
à bientôt
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1603
0
Merci
Nope, ça ne marche pas. Rien de mieux.
Mais, j'ai trouvé d'où vient le problème.
Il s'agit bel et bien d'une sécurité venant du navigateur (politique de même origine).
En la désactivant, cela fonctionne. Ouf :-).