Question dév Web service

Résolu/Fermé
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - Modifié par fiddy le 24/09/2014 à 00:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 sept. 2014 à 22:16
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
A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 sept. 2014 à 11:57
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,
1
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
24 sept. 2014 à 12:02
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é.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 24/09/2014 à 14:07
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).
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
24 sept. 2014 à 07:54
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:
https://html5.immo-scope.com/article/webservices_WsRestFullViaZendFramework

A+
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 24/09/2014 à 12:20
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 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
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
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
24 sept. 2014 à 12:10
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 sept. 2014 à 14:07
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.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
24 sept. 2014 à 21:33
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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 sept. 2014 à 22:16
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 :-).
0