Aller au contenu


Conception d'un WebService selon l'architecture REST


29 réponses à ce sujet
  • Vous ne pouvez pas répondre à ce sujet

#1
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)

[color=#ff0000;]EDIT : MAJ le 11/10/2016, nouveau lien pour DL les source : [/color]http://gold-s.net/La...RVICE/ressource

Dernièrementje vous parlé des WebService (WS) et de REST (http://forum.animese...les-webservice/), voici aujourd'hui un tutoriel surla façon de concevoir des WebService de façon assez basic.

note : Cette article s'adresse au développeur ayant une bonne approche des technologie du Web (PHP, Ajax, etc...).

Sommaire:


    [*]Le besoin
    [*]La définition des spécifications
    [*]Le code
    [/list]

    1. Le Besoin

    Avant de commencer à coder il faut savoir ce que l'on doit coder, en effet les WS devront répondre a un certain besoin dont l'utilisateur a accès et afin de garantir la pérennité du WS il est or de question que se dernier subisse des modifications après sa mise en ligne (ormie pour l'optimisation du code ou l'ajout de ressource).

    Afin de mieux démontrer la marche a suivre je vais prendre un exemple relativement simple: "La gestion d'utilisateur".

    Je vais donc me mettre en condition :

    "Je souhaite mettre à la disposition un WS permettant de gérer une liste d'utilisateur. Chaque utilisateur aura: un nom, un prénom, un pseudo et un mot de passe. Le WS permettra d'avoir la liste desutilisateur, d'afficher un utilisateur, de le modifier, de le supprimer et enfin d'en ajouter un."

    Voilà j'ai mon besoin, les mots souligner sont ce qu'il y a retenir, on peut donc déjà prévoirqu'on aura une BDD pour stocker les utilisateurs et que l'on pourra faire différente action dessus.

    Dans cette exemple la liste d'utilisateur sera commune à tous les utilisateur du WS, on pourrait facilement penser un système d'authentification (avec une inscription aupréalable sur le site fournissant le WS) permettant a chaque utilisateur du WS d'avoir sa propre liste d'utilisateur.

    2. La définition des spécifications

    Voilà,maintenant que j'ai mon besoin je peux vraiment commencer la conception du WS avec la définition des spécifications.

    Revoyons les actions que permettra le WS:


      [*]Fournir la liste des utilisateurs (ressource 1).
      [*]Afficher un utilisateur (ressource 2).
      [*]Modifier un utilisateur (ressource 2).
      [*]Supprimer un utilisateur (ressource 2).
      [*]Ajouter un utilisateur (ressource 2).
      [/list]

      On peut donc constater que l'on aura 5 possibilité que l'on peut séparer en deux ressource,la première concernant la liste des utilisateur et la seconde conserant les utilisateurs a l'unité.

      Deux ressource donc deux URI, pour l'exemple le WS sera héberger sur un site fictif que l'on nommera [color=#0000FF;]http://MonSitedeWS.fr/[/color]et les WS seront dans le répertoire [color=#0000FF;]/WEBSERVICE[/color][color=#0066CC;]/Utilisateur[/color],les WS seront donc accessible depuis cette adresse:
      [color=#0000FF;]http://MonSitedeWS.fr[/color][color=#0000FF;]/WEBSERVICE[/color][color=#0066CC;]/Utilisateur[/color].

      Ma premièreressource sera accessible via l'URI: [color=#0000FF;][color=#0000FF;]http://MonSitedeWS.f...LstUtilisateurs[/color]/[/color]et la seconde: [color=#0000FF;]http://MonSitedeWS.f...ur/Utilisateur/[/color].

      Voyons maintenant plus en détail les spécifications:

      Ma premièreressource permet d'obtenir la liste des utilisateurs:


        [*]Elle ne prendra aucun paramètre.
        [*]Elle sera appelée via la méthode par défaut (GET).
        [*]Elle retournera un tableaux de tableaux en JSON sous cette forme [{"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur 1","Utilisateur_Prenom":" Prenom Utilisateur 1","Utilisateur_Pseudo":"Pseudo Utilisateur 1","Utilisateur_Pass":"Pass Utilisateur 1"},{"Utilisateur_ID":"2","Utilisateur_Nom":"Nom Utilisateur 2","Utilisateur_Prenom":" Prenom Utilisateur 2","Utilisateur_Pseudo":"Pseudo Utilisateur 2","Utilisateur_Pass":"Pass Utilisateur 2"}, etc...] .
        [*]Elle sera appelée via l'URI: [color=#0000FF;][color=#0000FF;]http://MonSitedeWS.f...LstUtilisateurs[/color]/.[/color]
        [/list]

        Ma deuxième ressource permet plusieurs actions:

        - Affiche run utilisateur.


          [*]Elle prendra en paramètre l'ID de l'utilisateur a affiché sous forme application/x-www-form-urlencoded ex: "ID=1".
          [*]Elle sera appelée via la méthode par défaut (GET).
          [*]Elle retournera un tableau en JSON sous cette forme {"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
          [*]Elle sera appelé via l'URI: [color=#0000FF;]http://MonSitedeWS.f...ur/Utilisateur/[/color] où [color=#0000FF;][color=#000000;][color=#0000FF;]http://MonSitedeWS.f...eur/Utilisateur[/color][/color]/ID/[/color] (ID étant l'ID de l'utilisateur que l'on souhaite obtenir).
          [/list]

          - Modifier un utilisateur.


            [*]Elle prendra en paramètre un tableau en JSON sous cette forme {"Utilisateur_ID":"1","Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
            [*]Elle sera appelé via la méthode PUT.
            [*]Elle retournera un booléen.
            [*]Elle sera appelée via l'URI: [color=#0000FF;]http://MonSitedeWS.f...ur/Utilisateur/[/color].
            [/list]

            - Supprimerun utilisateurs.


              [*]Elle prendra en paramètre l'ID de l'utilisateur a affiché sous forme application/x-www-form-urlencoded ex: "ID=1".
              [*]Elle sera appelé via la méthode DELETE.
              [*]Elle retournera un booléen.
              [*]Elle sera appelé via l'URI: [color=#0000FF;][color=#000000;][color=#0000FF;]http://MonSitedeWS.f...ur/Utilisateur/[/color][/color][/color].
              [/list]

              - Ajouter unutilisateur


                [*]Elle prendra en paramètre un tableaux en JSON sous cette forme {"Utilisateur_Nom":"Nom Utilisateur","Utilisateur_Prenom":" Prenom Utilisateur","Utilisateur_Pseudo":"Pseudo Utilisateur","Utilisateur_Pass":"Pass Utilisateur"}.
                [*]Elle sera appelée via la méthode POST.
                [*]Elle retournera un booléen.
                [*]Elle sera appelée via l'URI: [color=#0000FF;]http://MonSitedeWS.f...ur/Utilisateur/[/color].
                [/list]

                Voilà j'ai mes spécification, elles me permettront de coder le WS et à l'utilisateurd'utiliser le WS correctement.

                3. Le code

                Pour la suite je vous invite à télécharger le fichier de ressource suivant: http://jheberg.net/captcha/ressource/

                 

                Et voici un package avec Uwamp préconfigurer et pres a l'emploie

                 

                Il contient:


                  [*]Le WS.
                  [*]Un exemple d'utilisation en Ajax.
                  [*]Un exemple d'utilisation en C# (pour les utilisateurs de Linux et Max, je n'est pas testé la compatibilité avec mono runtime).
                  [/list]

                  Pour les exemples en Ajax et en C# il faudra que vous modifier les URI avec celle que vous obtiendrez en installant le WS sur votre PC via un serveur AMP ou sur un serveur en ligne. Pour l'exemple Ajax il suffit de modifier les deux variable en haut du fichier script.js, pour l'exemple C# il faut modifier le fichierParam.xml.

                  Le répertoireWEBSERVICE contient deux répertoires et un fichier nommé .htaccess, il va permettre de faire de l'URL rewriting, voici sont contenu :


                    [*]RewriteEngine On
                    [*]RewriteBase /WEBSERVICE
                    [*]RewriteRule ^Utilisateur/Utilisateur/{:content:}nbsp; Utilisateur/Utilisateur.php [L]
                    [*]RewriteRule ^Utilisateur/Utilisateur/([0-9]+)/{:content:}nbsp; Utilisateur/Utilisateur.php?ID=$1 [L]
                    [*]RewriteRule ^Utilisateur/LstUtilisateurs/{:content:}nbsp; Utilisateur/LstUtilisateurs.php [L]
                    [/list]

                    La première ligne indique que l'on active la réécriture d'URL (il faut que le serveur le gère,pour apache il y a un module a activé sil il n'est pas activé par défaut), la seconde ligne le répertoire a partir duquel on va faire les réécritures. Lestrois dernières lignes permettent de faire la réécriture. On peut constater quela réécriture n'est pas importante (ajout de l'extension .php) mais si on veut garantir l'indépendance du langage utilisé il faut impérativement faire ce genre de réécriture.

                    Si l'on décidé de changé le langage du WS on aurait juste à modifier ce fichier pour garantirla pérennité des URI

                    ex:
                    RewriteRule ^Utilisateur/LstUtilisateurs/$ Utilisateur/LstUtilisateurs.php [L]
                    deviendrait
                    RewriteRule ^Utilisateur/LstUtilisateurs/$Utilisateur/LstUtilisateurs.asp [L]
                    si l'on passerai de PHP a ASP, l'URI resterai la même: Utilisateur/LstUtilisateurs/.

                    Pour le code PHP je vous laisse la joie de le lire, il n'y a pas de commentaire mais il reste relativement simple, voici quand même quelque explication:

                    [color=#708090;]ws_utilisateurs.sql[/color] permet de créé la table dans la base de donnée, il vous faudra ensuite modifierle fichier [color=#708090;]param_bd.php[/color] avec votre configuration.

                    Le fichier [color=#708090;]rest.php[/color] permet de créé les variable global [color=#0000ff;]$_POST[/color], [color=#0000ff;]$_PUT[/color] et[color=#0000ff;] $_DELETE[/color] a partir de donné en JSON ou en XML, pour se faire il utilise la fonction[color=#696969;] file_get_contents[/color]("") qui permet de récupéré en brut les paramètre envoyé au serveur.

                    Les fichiers [color=#708090;]LstUtilisateurs.php[/color] et [color=#708090;]Utilisateur.php[/color] utilise la variable [color=#0000ff;]$_SERVER[[/color]'REQUEST_METHOD'[color=#0000ff;]][/color] pour connaitre la méthode utilisé puis utilise une condition "Selon" pour effectuer sa tâche.

                    Pour le code en Ajax j'ai utilsé Jquery pour simplifier le code.

                    Le Code C# utilise un DataGridView couplé a une source de donnée créé a partir de la classe collection Lst_Utilisateurs (qui contient un list d'objet Utilisateur créé a partir des utilisateur envoyé par le WS).


                    Pour ceux que sa intérésse de voire se que donne un WS plus concéquent google propose via ces APIs des WS de type REST:
                    http://code.google.c...ng_started.html
                    voici les spécification des WS pour google calendar:
                    http://code.google.c.../reference.html
                    (avec la possibilité de tester en ligne)


                    Si vous avez des questions ou des remarque a faire n'ésité pas.


                    Modifié par goldbergg, 11 octobre 2016 - 13:03.

  • 4

#2
Mouquette

  • messages 23
  • Inscrit(e) : 21 novembre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 1 (Neutre)
C'est donc bien ce que je pensais, du côté serveur sa reste du PHP (ou de l'ASP, selon)C'était surtout cette partie la qui était sombre pour moiDonc rien de bien compliqué en fait ;)
  • 0

#3
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Oui sa n'a rien de compliqué, aprés tous dépendera biensur de se que l'on codera comme type de WSCoté serveur on peux avoire n'importe quelle language suporté par un serveur HTTP (C, C#, C++, Java, Perl, Python, VB, etc...)

Modifié par goldbergg, 03 décembre 2011 - 22:39.

  • 0

#4
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
bonjour,Merci bien pour ce tutorieljuste je veux savoir comment faire pour consommer ce web service par client androidje suis entrain de faire un projet client(android) serveur : mon client à le droit de consulter seulement.pour le web service je choisie de le faire en REST php mais je sais pas commentpouvez vous m'aider SVP
  • 0

#5
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Salut,Si tu veux faire appel a un webservice via une application android il te faudra faire appel a plusieur class:-DefaultHttpClient pour pouvoire comuniqué avec le serveur-httpput, httpost, httpget et httpdelete en fonction de la méthod a utilisé-HttpResponse pour recupéré la reponsseet en enffin JSONObject et JSONArray si tu doit ressevoire des reponsse en json (il existe aussi des class pour le XML).Voici un petit exemple:
public[lirelasuite][/lirelasuite]void[lirelasuite][/lirelasuite]AppelGet()[lirelasuite][/lirelasuite]throws[lirelasuite][/lirelasuite]ClientProtocolException,[lirelasuite][/lirelasuite]IOException,[lirelasuite][/lirelasuite]JSONException{		DefaultHttpClient[lirelasuite][/lirelasuite]client[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]DefaultHttpClient();	String[lirelasuite][/lirelasuite]getURL[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]"URI[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]ton[lirelasuite][/lirelasuite]WebSevice";	HttpGet[lirelasuite][/lirelasuite]get[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HttpGet(getURL);	HttpResponse[lirelasuite][/lirelasuite]responseGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]client.execute(get);	HttpEntity[lirelasuite][/lirelasuite]resEntityGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]responseGet.getEntity();	if[lirelasuite][/lirelasuite](resEntityGet[lirelasuite][/lirelasuite]!=[lirelasuite][/lirelasuite]null)[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite]//On[lirelasuite][/lirelasuite]a[lirelasuite][/lirelasuite]obtenue[lirelasuite][/lirelasuite]une[lirelasuite][/lirelasuite]reponsse		String[lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]EntityUtils.toString(resEntityGet);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	reponse[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]"{\"tab\":"[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]"}";[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	JSONObject[lirelasuite][/lirelasuite]jObject[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]JSONObject(reponse);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	JSONArray[lirelasuite][/lirelasuite]itemArray[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]jObject.getJSONArray("tab");	}}
Autre exemple avec la methode post et passage de paramétre pour tester la connexion a un site, le WS retourn un booléen:
public[lirelasuite][/lirelasuite]Boolean[lirelasuite][/lirelasuite]TestConnect(String[lirelasuite][/lirelasuite]login2,[lirelasuite][/lirelasuite]String[lirelasuite][/lirelasuite]pass2){	String[lirelasuite][/lirelasuite]PostURL[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]"URI[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]Mon[lirelasuite][/lirelasuite]WebService";	HttpPost[lirelasuite][/lirelasuite]httppost[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HttpPost(PostURL);	DefaultHttpClient[lirelasuite][/lirelasuite]httpclient[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]DefaultHttpClient();[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	try[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	List<NameValuePair>[lirelasuite][/lirelasuite]nameValuePairs[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]ArrayList<NameValuePair>();[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]			nameValuePairs.add(new[lirelasuite][/lirelasuite]BasicNameValuePair("Pseudo",[lirelasuite][/lirelasuite]login2));[lirelasuite][/lirelasuite]//Paramétre[lirelasuite][/lirelasuite]1[lirelasuite][/lirelasuite]			nameValuePairs.add(new[lirelasuite][/lirelasuite]BasicNameValuePair("Password",[lirelasuite][/lirelasuite]pass2));[lirelasuite][/lirelasuite]//Paramétre[lirelasuite][/lirelasuite]1[lirelasuite][/lirelasuite]			httppost.setEntity(new[lirelasuite][/lirelasuite]UrlEncodedFormEntity(nameValuePairs));[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]HttpResponse[lirelasuite][/lirelasuite]response=httpclient.execute(httppost);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]BufferedReader[lirelasuite][/lirelasuite]reader[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]BufferedReader(new[lirelasuite][/lirelasuite]InputStreamReader(response.getEntity().getContent()));[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]String[lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]reader.readLine();[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]int[lirelasuite][/lirelasuite]bool[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]Integer.parseInt(reponse);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	boolean[lirelasuite][/lirelasuite]b;[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]b[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite](bool[lirelasuite][/lirelasuite]==[lirelasuite][/lirelasuite]0[lirelasuite][/lirelasuite]?[lirelasuite][/lirelasuite]false[lirelasuite][/lirelasuite]:[lirelasuite][/lirelasuite]true)[lirelasuite][/lirelasuite];[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	if[lirelasuite][/lirelasuite](B){[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		return[lirelasuite][/lirelasuite]true;[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	}[lirelasuite][/lirelasuite]else[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		return[lirelasuite][/lirelasuite]false;[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	}[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](ClientProtocolException[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Toast.makeText(GAL_MOBILEActivity.this,[lirelasuite][/lirelasuite]"Erreur:[lirelasuite][/lirelasuite]ClientProtocolException[lirelasuite][/lirelasuite]-[lirelasuite][/lirelasuite]>[lirelasuite][/lirelasuite]"+e,[lirelasuite][/lirelasuite]Toast.LENGTH_LONG).show();			e.printStackTrace();			return[lirelasuite][/lirelasuite]false;		}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](IOException[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Toast.makeText(GAL_MOBILEActivity.this,[lirelasuite][/lirelasuite]"Erreur:[lirelasuite][/lirelasuite]IOException[lirelasuite][/lirelasuite]-[lirelasuite][/lirelasuite]>[lirelasuite][/lirelasuite]"+e,[lirelasuite][/lirelasuite]Toast.LENGTH_LONG).show();			e.printStackTrace();			return[lirelasuite][/lirelasuite]false;		}}
Si les exemple ne sont pas assé claire ou si je n'est pas repondu a ta question n'esite pas
  • 0

#6
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonsoir,désolé pour le retard et merci pour votre réponseen effet, mon projet consiste à la consultation d'une base de donné externe du grand surface via android.j'ai besoin de (GET) seulement et peut être (POST)j'ai testé votre exemple en localhost mais j'ai aucun résultat pour celle là http://localhost/Utilisateur.php?ID=1 pour les liste des utilisateurs ça marche mais si je veux consulter un unique utilisateur ça marche pasautrement SVP pouvez vous m'informer si je doit utiliser votre exemple ou bien Zend Framework pour créer mon web service et avez vous des exemples explicatif pour m'aider c'est très urgent et comment faire pour sécuriser mon web servicemerci infiniment
  • 0

#7
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Le lien que tu me fournie n'est pas significatif vue qu'il pointe vere ton PC et est accéssible que depuis ton PC.

A tu testé le WS qui ne fonctione pas sur un navigateur pour être sur qu'il fonctione bien?

A tu essayé d'envoyé les paramétre autrement que par l'URI, par exemple via la classe nameValuePairs?
DefaultHttpClient[lirelasuite][/lirelasuite]client[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]DefaultHttpClient();String[lirelasuite][/lirelasuite]getURL[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]"http://localhost/Utilisateur.php";HttpGet[lirelasuite][/lirelasuite]get[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HttpGet(getURL);List<NameValuePair>[lirelasuite][/lirelasuite]nameValuePairs[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]ArrayList<NameValuePair>();[lirelasuite][/lirelasuite]	nameValuePairs.add(new[lirelasuite][/lirelasuite]BasicNameValuePair("ID",[lirelasuite][/lirelasuite]1));get.setEntity(new[lirelasuite][/lirelasuite]UrlEncodedFormEntity(nameValuePairs));HttpResponse[lirelasuite][/lirelasuite]responseGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]client.execute(get);HttpEntity[lirelasuite][/lirelasuite]resEntityGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]responseGet.getEntity();
Au pire fournie moi ton code histoire de voire si il n'y a pas un probléme dans sa conception.

Pour se qui est du choi du framework, peut importe, zend founie un moyen de créé plusieur type de WS (SOAP, XML-RPC et REST) chacun a un moded'utilisation different, persso je te conseille REST car il est aussi performent et bien plus simple que les autre.
Persso je préfére codé tout a la main, surtous qu'il n'y a rien de bien compliqué.

Tu as peut être du remarqué que je fournie un fichier de ressource dans cette page : Ressource.zip tu peux t'en inspiré, il est assé simple mais plutop complé pour ilustré le bon fonctionement ainssi qu'une bonne façon de réalisé simplement un WS.

Si certain detail t'échape tu peux aussi consulter cette page: http://forum.animese...les-webservice/
  • 0

#8
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonjourmerci bien pour votre réponsejuste je veux vous dire que je test mon web service en local avant de faire l'appel via le client androidconcernant http://localhost/WEB...sateur.php?ID=1 ça marche en localhostmaintenant je suis entrain de créer mon propre web service concernant mon application juste je veux savoir est ce que le fichier .htaccess je le mettre dans le même dossier de mon webservice de plus puisque je besoin que de GET le fichier REST.php est inutile dans mon cas n'est ce pas?merci infiniment pour ton aide et j'espère que je vous dérange pas par mes questions.
  • 0

#9
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Le fichier REST.php sert a créé les variable global $_PUT et $_DELETE donc non il n'est pas nessécaire.Pour le .htaccess généralement on le mes a la racine du serveur, mais il devrais fonctioné si on le mes dans le repertoire qui contient le site, il suffit de bien configuré les directive a l'interieur.

Modifié par goldbergg, 18 mai 2012 - 10:20.

  • 0

#10
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonjour,merci bien pour votre aide :rolleyes:
  • 0

#11
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonsoir,désolé pour le dérangement je veux juste vous montrer mon code client le problème que j'ai rien récupérer avec le client android j'ai pris votre exemple pour la partie webserviceci-dessous mon code client
public[lirelasuite][/lirelasuite]class[lirelasuite][/lirelasuite]GestionSurfaceActivity[lirelasuite][/lirelasuite]extends[lirelasuite][/lirelasuite]ListActivity[lirelasuite][/lirelasuite]{	/**[lirelasuite][/lirelasuite]Called[lirelasuite][/lirelasuite]when[lirelasuite][/lirelasuite]the[lirelasuite][/lirelasuite]activity[lirelasuite][/lirelasuite]is[lirelasuite][/lirelasuite]first[lirelasuite][/lirelasuite]created.[lirelasuite][/lirelasuite]*/	@Override	public[lirelasuite][/lirelasuite]void[lirelasuite][/lirelasuite]onCreate(Bundle[lirelasuite][/lirelasuite]savedInstanceState)[lirelasuite][/lirelasuite]{		super.onCreate(savedInstanceState);		//[lirelasuite][/lirelasuite]setContentView(R.layout.main);		String[lirelasuite][/lirelasuite]result[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]null;		InputStream[lirelasuite][/lirelasuite]is[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]null;		JSONObject[lirelasuite][/lirelasuite]json_data[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]null;		ArrayList<NameValuePair>[lirelasuite][/lirelasuite]nameValuePairs[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]ArrayList<NameValuePair>();		ArrayList<String>[lirelasuite][/lirelasuite]donnees[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]ArrayList<String>();		try[lirelasuite][/lirelasuite]{			//[lirelasuite][/lirelasuite]commandes[lirelasuite][/lirelasuite]httpClient			HttpClient[lirelasuite][/lirelasuite]httpclient[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]DefaultHttpClient();			HttpPost[lirelasuite][/lirelasuite]httppost[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HttpPost("http://10.0.2.2/WEBSERVICE/LstProduit.php/");			httppost.setEntity(new[lirelasuite][/lirelasuite]UrlEncodedFormEntity(nameValuePairs));			HttpResponse[lirelasuite][/lirelasuite]response[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]httpclient.execute(httppost);			HttpEntity[lirelasuite][/lirelasuite]entity[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]response.getEntity();			is[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]entity.getContent();		}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](Exception[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Log.i("taghttppost",[lirelasuite][/lirelasuite]""[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]e.toString());			Toast.makeText(getBaseContext(),[lirelasuite][/lirelasuite]e.toString(),[lirelasuite][/lirelasuite]Toast.LENGTH_LONG)					.show();		}		//[lirelasuite][/lirelasuite]conversion[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]réponse[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]chaine[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]caractère		try[lirelasuite][/lirelasuite]{			BufferedReader[lirelasuite][/lirelasuite]reader[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]BufferedReader(new[lirelasuite][/lirelasuite]InputStreamReader(					is,[lirelasuite][/lirelasuite]"UTF-8"));			StringBuilder[lirelasuite][/lirelasuite]sb[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]StringBuilder();			String[lirelasuite][/lirelasuite]line[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]null;			while[lirelasuite][/lirelasuite]((line[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]reader.readLine())[lirelasuite][/lirelasuite]!=[lirelasuite][/lirelasuite]null)[lirelasuite][/lirelasuite]{				sb.append(line[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]"\n");			}			is.close();			result[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]sb.toString();		}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](Exception[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Log.i("tagconvertstr",[lirelasuite][/lirelasuite]""[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]e.toString());		}		//[lirelasuite][/lirelasuite]recuperation[lirelasuite][/lirelasuite]des[lirelasuite][/lirelasuite]donnees[lirelasuite][/lirelasuite]json		try[lirelasuite][/lirelasuite]{			JSONArray[lirelasuite][/lirelasuite]jArray[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]JSONArray(result);			for[lirelasuite][/lirelasuite](int[lirelasuite][/lirelasuite]i[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]0;[lirelasuite][/lirelasuite]i[lirelasuite][/lirelasuite]<[lirelasuite][/lirelasuite]jArray.length();[lirelasuite][/lirelasuite]i++)[lirelasuite][/lirelasuite]{				json_data[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]jArray.getJSONObject(i);				donnees.add("nom[lirelasuite][/lirelasuite]:[lirelasuite][/lirelasuite]"+[lirelasuite][/lirelasuite]json_data.getString("nom"));				//[lirelasuite][/lirelasuite]r.add(json_data.getString("categorie"));				result[lirelasuite][/lirelasuite]+=[lirelasuite][/lirelasuite]"\n\t"[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]jArray.getJSONObject(i);[lirelasuite][/lirelasuite]			}		[lirelasuite][/lirelasuite]setListAdapter(new[lirelasuite][/lirelasuite]ArrayAdapter<String>(this,					android.R.layout.simple_expandable_list_item_1,[lirelasuite][/lirelasuite]donnees));		}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](JSONException[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Log.i("tagjsonexp",[lirelasuite][/lirelasuite]""[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]e.toString());		}[lirelasuite][/lirelasuite]catch[lirelasuite][/lirelasuite](ParseException[lirelasuite][/lirelasuite]e)[lirelasuite][/lirelasuite]{			Log.i("tagjsonpars",[lirelasuite][/lirelasuite]""[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]e.toString());		}	}}

  • 0

#12
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Bon déjà je ne sais pas comment tu a construit ton WS, mais tu utilise la mauvaise méthode HTTP.Tu fais un appel pour avoire la liste des produits et tu utilise la méthode POST.Pour rappel:GET - > appel (requete correspondante en SQL : SELECT)POST -> soumission (requete correspondante en SQL : INSERT)PUT -> Ajout/Modification (requete correspondante en SQL : UPDATE)DELETE -> Supression (requete correspondante en SQL : DELETE)Donc la méthode adequate serait plus HttpGet.Autre chose, si tu n'envoie aucun paramétre, inutile d'utilisé la classe nameValuePairsVoici pour moi a quoi devrait ressemblé le code (sans les instruction Try/Catch):
//J'instancie[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]clientDefaultHttpClient[lirelasuite][/lirelasuite]client[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]DefaultHttpClient();	//J'appel[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]WSHttpGet[lirelasuite][/lirelasuite]get[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HttpGet("http://10.0.2.2/WEBSERVICE/LstProduit.php");[lirelasuite][/lirelasuite]//Je[lirelasuite][/lirelasuite]recupére[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]réponsseHttpResponse[lirelasuite][/lirelasuite]responseGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]client.execute(get);HttpEntity[lirelasuite][/lirelasuite]resEntityGet[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]responseGet.getEntity();//Si[lirelasuite][/lirelasuite]j'ai[lirelasuite][/lirelasuite]une[lirelasuite][/lirelasuite]reponsse...if[lirelasuite][/lirelasuite](resEntityGet[lirelasuite][/lirelasuite]!=[lirelasuite][/lirelasuite]null)[lirelasuite][/lirelasuite]{	//...[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]recupére[lirelasuite][/lirelasuite]dans[lirelasuite][/lirelasuite]une[lirelasuite][/lirelasuite]chaine	String[lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]EntityUtils.toString(resEntityGet);	//Je[lirelasuite][/lirelasuite]place[lirelasuite][/lirelasuite]ma[lirelasuite][/lirelasuite]chaine(qui[lirelasuite][/lirelasuite]est[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]JSON[lirelasuite][/lirelasuite]généré[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]PHP)[lirelasuite][/lirelasuite]dans[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]associatif[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]JSON[lirelasuite][/lirelasuite]dont[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]clée[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]premiére[lirelasuite][/lirelasuite]et[lirelasuite][/lirelasuite]unique[lirelasuite][/lirelasuite]case[lirelasuite][/lirelasuite]est[lirelasuite][/lirelasuite]"tab"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]"{\"tab\":"[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]reponse[lirelasuite][/lirelasuite]+[lirelasuite][/lirelasuite]"}";	//Je[lirelasuite][/lirelasuite]convertie[lirelasuite][/lirelasuite]ma[lirelasuite][/lirelasuite]chaine[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]JSONObject[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]JSONObject[lirelasuite][/lirelasuite]jObject[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]JSONObject(reponse);	//A[lirelasuite][/lirelasuite]partir[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]la[lirelasuite][/lirelasuite]clée[lirelasuite][/lirelasuite]"tab"[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]assoc[lirelasuite][/lirelasuite]créé[lirelasuite][/lirelasuite]précédement,[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]recupére[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]contenu(le[lirelasuite][/lirelasuite]JSON[lirelasuite][/lirelasuite]généré[lirelasuite][/lirelasuite]par[lirelasuite][/lirelasuite]PHP[lirelasuite][/lirelasuite]donc)[lirelasuite][/lirelasuite]et[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]place[lirelasuite][/lirelasuite]dans[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]JSONArray[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]JSONArray[lirelasuite][/lirelasuite]itemArray[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]jObject.getJSONArray("tab");	//Je[lirelasuite][/lirelasuite]recupre[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]nombre[lirelasuite][/lirelasuite]d'élément...[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]int[lirelasuite][/lirelasuite]nbItemArray[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]itemArray.length();	//...[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]pouvoire[lirelasuite][/lirelasuite]traiter[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]dans[lirelasuite][/lirelasuite]une[lirelasuite][/lirelasuite]boucle[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	for[lirelasuite][/lirelasuite](int[lirelasuite][/lirelasuite]i=0;i[lirelasuite][/lirelasuite]!=[lirelasuite][/lirelasuite]nbItemArray;[lirelasuite][/lirelasuite]i++)[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	{		//traitement[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]JSON[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	}[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]				}
Autre chose, a tu testé en placant des Toast ou en utilisant le debogeur que tu ressois bien une reponsse avant d'essayé de la traité?
  • 0

#13
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonsoir,merci pour votre aidepour le web service c'est comme le votre j'essayerais votre code pour la partie clientmerci infiniementBonsoirvraiment je trouve pas des mots pour vous remerciej'ai testé votre code et ça va marcher désolé pour le dérangementmerci

Modifié par Nesse1040, 16 août 2012 - 06:00.

  • 0

#14
Tornado

      God’s in his heaven, all’s right with the world

  • messages 1 085
  • Inscrit(e) : 19 janvier 2012

  • Humeur du actuel : Vegged Out

Réputation : 76 (Se fait un nom)
Je dois te félicité...d'avoir rédiger ton tutoriel sans aucune aide. C'est pas que j'ai pas confiance. Mais c'est quelque chose de rare. Donc +1 remerciement.Je note sur mon carnet de le regarder en profondeur une fois mes partiels passé. C'est dommage que c'était pas pendant mon devoir de Web...mais bon on peut pas demander la lune non plus.

Modifié par Anonymous, 19 mai 2012 - 19:23.

  • 0

131222073057808347.png

Spoiler

#15
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonsoir,SVP pouvez vous m'aider et me montrer comment créer un web service php pour les images et les récupérer par androiden faite :j'ai une liste de produit chaque produit à un id, nom, description,prix et imageje veux créer son web service le parser sous JSON et le récupérer par android, je veux lorsque je clic sur un produit qq dans ma liste view il m'affiche son image correspondant.J'ai réussi de récupérer les autres info sauf l'image je sais pas commentMerci d'avance
  • 0

#16
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Bonjour,Pour afficher une image dans un listview il faut dabort bien évidement recupérer le chemin de l'image sur forme d'une URL (ex : http://monDomaine.fr...in/monImage.jpg)Donc dans ton PHP, quand tu créé ton tableau avec les diferente information sur les produit il faut que tu rajoute systématiquement un champ avec l'URL de l'image corespondante.Enssuite il y a plusieur solution, persso voici celle que j'utilise:Dans un premier temp tu créé ta view qui contiendra ton ListView:
<ListView[lirelasuite][/lirelasuite]	android:id="@+id/listView1"[lirelasuite][/lirelasuite]	android:layout_width="match_parent"[lirelasuite][/lirelasuite]	android:layout_height="match_parent"[lirelasuite][/lirelasuite]	android:cacheColorHint="#00000000"></ListView>
(la propriété cacheColorHint avec les valeur a 0 sert a evité des bug d'affichage)Enssuite tu créé une vue a coté qui sera le modelle des items que contiendra ta ListView:
<LinearLayout[lirelasuite][/lirelasuite]xmlns:android="http://schemas.android.com/apk/res/android"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]android:orientation="horizontal"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]android:layout_width="match_parent"[lirelasuite][/lirelasuite]	android:layout_height="match_parent"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]android:id="@+id/ligne"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]android:background="#0000">[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]<ImageView		android:id="@+id/img"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:layout_gravity="center_vertical"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:padding="3px"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:layout_width="50dp"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:layout_height="70dp"/>	<LinearLayout[lirelasuite][/lirelasuite]xmlns:android="http://schemas.android.com/apk/res/android"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:orientation="vertical"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:layout_width="fill_parent"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:layout_height="wrap_content"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:layout_gravity="center_vertical"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:paddingLeft="3px"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:layout_weight="1">		<TextView[lirelasuite][/lirelasuite]android:id="@+id/ids"[lirelasuite][/lirelasuite]			android:layout_width="fill_parent"[lirelasuite][/lirelasuite]			android:layout_height="fill_parent"[lirelasuite][/lirelasuite]			android:text="ID"/>[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	<TextView[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:textAppearance="?android:attr/textAppearanceMedium"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]		android:id="@+id/nom"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:layout_width="fill_parent"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:layout_height="fill_parent"[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	android:text="Nom"/>[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	<TextView[lirelasuite][/lirelasuite]android:id="@+id/description"[lirelasuite][/lirelasuite]			android:layout_width="fill_parent"[lirelasuite][/lirelasuite]			android:layout_height="fill_parent"[lirelasuite][/lirelasuite]			android:text="Description"/>[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	<TextView[lirelasuite][/lirelasuite]android:id="@+id/prix"[lirelasuite][/lirelasuite]			android:layout_width="fill_parent"[lirelasuite][/lirelasuite]			android:layout_height="fill_parent"[lirelasuite][/lirelasuite]			android:text="Prix"/>[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]</LinearLayout></LinearLayout>
Dans mon exemple se fichier sera nomé affichageitem.xmlPuis pour le code Java:
//Je[lirelasuite][/lirelasuite]recupére[lirelasuite][/lirelasuite]ma[lirelasuite][/lirelasuite]ListViewListView[lirelasuite][/lirelasuite]LST_Produits[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite](ListView)[lirelasuite][/lirelasuite]findViewById(R.id.listView1);//Je[lirelasuite][/lirelasuite]déclare[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]tableau[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]HashMap[lirelasuite][/lirelasuite]qui[lirelasuite][/lirelasuite]servira[lirelasuite][/lirelasuite]a[lirelasuite][/lirelasuite]stocké[lirelasuite][/lirelasuite]mes[lirelasuite][/lirelasuite]item[lirelasuite][/lirelasuite]avant[lirelasuite][/lirelasuite]des[lirelasuite][/lirelasuite]affichéArrayList<HashMap<String,[lirelasuite][/lirelasuite]String>>[lirelasuite][/lirelasuite]listItem[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]ArrayList<HashMap<String,[lirelasuite][/lirelasuite]String>>();//Je[lirelasuite][/lirelasuite]déclare[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]hashMap[lirelasuite][/lirelasuite]qui[lirelasuite][/lirelasuite]sera[lirelasuite][/lirelasuite]l'equivalent[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]mes[lirelasuite][/lirelasuite]items[lirelasuite][/lirelasuite]dans[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]codeHashMap<String,[lirelasuite][/lirelasuite]String>[lirelasuite][/lirelasuite]map;//On[lirelasuite][/lirelasuite]boucle[lirelasuite][/lirelasuite]les[lirelasuite][/lirelasuite]donné[lirelasuite][/lirelasuite]recupére[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]JSON[lirelasuite][/lirelasuite](pour[lirelasuite][/lirelasuite]plus[lirelasuite][/lirelasuite]d'info[lirelasuite][/lirelasuite]sur[lirelasuite][/lirelasuite]cette[lirelasuite][/lirelasuite]partie[lirelasuite][/lirelasuite]là[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]t'invite[lirelasuite][/lirelasuite]a[lirelasuite][/lirelasuite]lire[lirelasuite][/lirelasuite]les[lirelasuite][/lirelasuite]poste[lirelasuite][/lirelasuite]précedent)for[lirelasuite][/lirelasuite](int[lirelasuite][/lirelasuite]i[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]1;[lirelasuite][/lirelasuite]i[lirelasuite][/lirelasuite]<[lirelasuite][/lirelasuite]MonTableauJson.length;[lirelasuite][/lirelasuite]i++)[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	map[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]HashMap<String,[lirelasuite][/lirelasuite]String>();	map.put("img",[lirelasuite][/lirelasuite]"Le[lirelasuite][/lirelasuite]chemin[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]image"));[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]	map.put("ID",[lirelasuite][/lirelasuite]"L'ID");[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]map.put("nom",[lirelasuite][/lirelasuite]"Le[lirelasuite][/lirelasuite]nom");[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]map.put("description",[lirelasuite][/lirelasuite]"La[lirelasuite][/lirelasuite]description");[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]map.put("prix",[lirelasuite][/lirelasuite]"Le[lirelasuite][/lirelasuite]prix");[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]listItem.add(map);}//On[lirelasuite][/lirelasuite]complete[lirelasuite][/lirelasuite]enssuite[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]ListViewSimpleAdapter[lirelasuite][/lirelasuite]mSchedule[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]SimpleAdapter[lirelasuite][/lirelasuite](this.getBaseContext(),[lirelasuite][/lirelasuite]listItem,[lirelasuite][/lirelasuite]R.layout.affichageitem,[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]String[][lirelasuite][/lirelasuite]{"img",[lirelasuite][/lirelasuite]"ID",[lirelasuite][/lirelasuite]"nom",[lirelasuite][/lirelasuite]"description",[lirelasuite][/lirelasuite]"prix"},[lirelasuite][/lirelasuite]new[lirelasuite][/lirelasuite]int[][lirelasuite][/lirelasuite]{R.id.img,[lirelasuite][/lirelasuite]R.id.ids,[lirelasuite][/lirelasuite]R.id.nom,[lirelasuite][/lirelasuite]R.id.description[lirelasuite][/lirelasuite]R.id.prix});[lirelasuite][/lirelasuite]	LST_Produits.setAdapter(mSchedule);

  • 0

#17
aladin2110

  • messages 9
  • Inscrit(e) : 12 mai 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Bonsoirdésolé pour le retard merci infiniment pour l'aider
  • 0

#18
exalid

  • messages 35
  • Inscrit(e) : 08 septembre 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
A noter que sur Android afin de ne pas bloquer le main thread il est fortement conseillé d'utiliser une AsyncTask.Cf la doc Android.Je conseille clairement d'utiliser RoboGuice pour gérer les Async.La méthode du dessus reste bonne ensuite perso j'utilise plutôt des HashMap mais ça revient à la même chose.Un exemple avec les async :
public[lirelasuite][/lirelasuite]class[lirelasuite][/lirelasuite]CallWebServiceTask[lirelasuite][/lirelasuite]extends[lirelasuite][/lirelasuite]AsyncTask[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]private[lirelasuite][/lirelasuite]ProgressDialog[lirelasuite][/lirelasuite]dialog;[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]protected[lirelasuite][/lirelasuite]Context[lirelasuite][/lirelasuite]applicationContext;[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]@Override[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]protected[lirelasuite][/lirelasuite]void[lirelasuite][/lirelasuite]onPreExecute()[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]this.dialog[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]ProgressDialog.show(applicationContext,[lirelasuite][/lirelasuite]"Calling",[lirelasuite][/lirelasuite]"Time[lirelasuite][/lirelasuite]Service...",[lirelasuite][/lirelasuite]true);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]}[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]@Override[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]protected[lirelasuite][/lirelasuite]String[lirelasuite][/lirelasuite]doInBackground(Void...[lirelasuite][/lirelasuite]params)[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]return[lirelasuite][/lirelasuite]Start.getTimeStampFromYahooService();[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]}[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]@Override[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]protected[lirelasuite][/lirelasuite]void[lirelasuite][/lirelasuite]onPostExecute(String[lirelasuite][/lirelasuite]result)[lirelasuite][/lirelasuite]{[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]this.dialog.cancel();[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]String[lirelasuite][/lirelasuite]timestamp[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]Start.parseJSONResponse(result);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]timestamp[lirelasuite][/lirelasuite]=[lirelasuite][/lirelasuite]Start.UnixTimeStampToDateTime(timestamp);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]Start.this.getTxtTime().setText(timestamp);[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]}[lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite][lirelasuite][/lirelasuite]}
Dans le preExecute tu es encore dans le main thread (UI thread) avant l'appel à la tache en background, le doInBackground comme son nom l'indique est l'endroit ou tu vas faire ton traitement qui sera dans l'async task, le postExecute te permet de récupérer ton résultat dans le main thread.Ici ce n'est vraiment qu'un exemple, voici la page de la doc associée : http://developer.and...tml.Réfères-toi à la partie "AsyncTask's generic types" et "The 4 steps" pour avoir plus de précision sur l'utilisation de ces méthodes.Pour la gestion de la réponse passer par un buffered reader est un peu moche je trouve.Pour des questions de performance l'utilisation du JSon est clairement conseillée mais la même chose est possible en XML.Enfin abuse des frameworks à disposition d'Android. Le SDK commence a bien mûrir et de nombreux frameworks sont disponibles pour les développeurs.RoboGuice facilite la vie avec l'ajout des annotations et injections de vue (super pratique plutôt que de passer par des vieux findViewByID partout dans ton code).ORMLite et GreenDAO pour la gestion de la BDD embarquée sont plus que conseillés si jamais tu ne veux pas te coltiner les appels à la BDD via du vieux sqlite bien chiant.A noter que ORMLite éprouve quelques problèmes en conjonction avec RoboGuice (donc du coup plutôt greendao).Sinon pour le backoffice j'ai vu plus haut que quelqu'un parlait de php, de c++, de c, ...Perso le php pour du webservice coté serveur, no way. On voit comment facebook a bien galéré a ses débuts avec le php, pour ensuite passer à l'HyperPhp par dépit vu que tout était déjà fait en php...La seule chose que je puisse conseiller de ce côté la est clairement d'installer un apache, d'installer un tomcat, et roule ma poule en Java.Y a des framework fait spécialement pour ça qui permettent de déployer une architecture sécu, restfull ou non, très vite.Je pense notamment à Spring et plus particulièrement Spring sécurity qui sont déjà employés dans la plupart des grosses structures mondiales.Le Java reste la référence en matière de flux sur le web, avec des outils simples et pré déployés pour les plus novices.

Modifié par exalid, 10 septembre 2012 - 13:41.

  • 0

#19
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)

Sinon pour le backoffice j'ai vu plus haut que quelqu'un parlait de php, de c++, de c, ...Perso le php pour du webservice coté serveur, no way. On voit comment facebook a bien galéré a ses débuts avec le php, pour ensuite passer à l'HyperPhp par dépit vu que tout était déjà fait en php...La seule chose que je puisse conseiller de ce côté la est clairement d'installer un apache, d'installer un tomcat, et roule ma poule en Java.Y a des framework fait spécialement pour ça qui permettent de déployer une architecture sécu, restfull ou non, très vite.Je pense notamment à Spring et plus particulièrement Spring sécurity qui sont déjà employés dans la plupart des grosses structures mondiales.Le Java reste la référence en matière de flux sur le web, avec des outils simples et pré déployés pour les plus novices.

Le PHP a beaucoup de cas particulié en fonction de l'OS, de la verssion (fast-cgi,...) et du compilo qui a servi pour généré les binaire(bon ca sa ne concerne que windows) (plus d'info sur la conf PHP de la techday 2012)de plus php propose aussi d'exelent framework, on a même des ORM qui introduise linq !Tu dit que java est la reference, j'ai entendu la même concernant l'ASP.NET.En se moment dans la boite dans lequel je bosse je fais justement de l'ASP et certe c'est puissant, en 10 sec montre en main(et sans exagérer) je code un WS compatible REST et SOAP et que me générer du XML ou du JSON en fonction du Content-Type de ma requette...(et le tous sans framework particulié bien sur, ni configuration, juste une simple fonction toute conne dans un fichier asmx ou wcf)Bref juste pour dire y aucune techno au dessus de toute les autre, juste de preference, et de toute facon en entreprise généralement on nous l'impose!(et dans le cas de se topic, se qui importe c'est la conception, le code on s'en fiche un peu)

Modifié par Nesse1040, 13 septembre 2012 - 06:03.

  • 0

#20
exalid

  • messages 35
  • Inscrit(e) : 08 septembre 2012

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)

name='goldbergg' timestamp='1347487943' post='169410']
et Facebook n'est certainement pas une reference pour le PHP... (surtous que PHP a beaucoup de cas particulié en fonction de l'OS, de la verssion (fast-cgi,...) et du compilo [...]

Minute. Le PHP n'est pas un langage compilé, c'est un langage interprété. A la limite "tokenisé".
Pour le cas de Facebook, c'est une référence pour la charge sur les serveurs. Puisqu'effectivement Facebook est une des plus grosse plateforme qui utilisait du PHP.
Tu peux effectivement faire tout ce que tu veux avec n'importe quoi. Même t'amuser à faire du soap en asm. Il est ici question de performance. Quand on considère que le Java est une surcouche C, effectivement, théoriquement le C devrait être plus performant. Le problème c'est qu'en pratique, le Java est plus riche en terme de communauté et de framework à disposition (ce qui est lié à la communauté de développeur quelque part).
Tu as l'air de vouloir causer techno et usage, why not, je vais être bref pour ne pas trop dériver du sujet qui est l'utilisation de webservice côté serveur et client.
Effectivement, l'usage est important. Un tier ne va pas développer son site web en Java (dans ce cas un coup de PHP est bien plus rapide et simple niveau déploiment). A contrario une ss2i de 15000 collaborateur ne va pas déployer une plateforme web à la sncf en PHP.
La guéguerre du petit dev auto entrepreneur qui déploie des petites plateformes pour son client et du petit ingénieur qui travaille pour une grosse société de service est totalement puérile.

Chaque langage à son usage, chaque usage à son client.

Ce que j'entendais par l'utilisation du Java, c'était le déploiement de plateforme de grosse ampleur. Dans ce cas précis, le premier critère reste la performance. L'optimisation des coûts est la première préoccupation de tout le monde.
Perso je vois plus de plateforme qui offre des entry point sur des WS en Java ou .NET, que des plateformes en PHP.
En toute honnêteté je ne me lancerai pas dans du webservice sécu en PHP. Déjà que la gestion de certificat de sécu est horrible même en Java (le setup des http conduit avec le paluchage des Keystore et des Truster notamment) alors en PHP sur du gros webservice complet, j'imagine même pas. Et encore je ne parle pas de déploiement selon les environnements (dev, qualif, prod).

Donc perso, tous les langages OK, mais intelligemment et selon le besoin.

name='goldbergg' timestamp='1347487943' post='169410']
En se moment dans la boite dans lequel je bosse je fais justement de l'ASP et certe c'est puissant, en 10 sec montre en main(et sans exagérer) je code un WS compatible REST et SOAP et que me générer du XML ou du JSON en fonction du Content-Type de ma requette...

Y a un mais ? Je comprends pas bien ta phrase.

Modifié par Nesse1040, 13 septembre 2012 - 06:12.

  • 0

#21
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
Pour PHP je parle de la compilation des source (et au passage un code PHP peux être compilé, tous comme il peut être utilisé en CLI les utilisation d'un language ne se limite pas forcement a celle que l'on connait le mieux), il a été prouvé (pour les verssion windows en tous cas) que les binaire proposé (officiellement) ne proposais pas tous les même perf(pour une même verssion de PHP) et je parle de différence énorme.

Tu as l'air de vouloir causer techno et usage, why not, je vais être bref pour ne pas trop dériver du sujet qui est l'utilisation de webservice côté serveur et client.

Pas du tous et le sujet c'est la conception d'un WS pas l'utilisation, les extrait de code fourni ne sont qu'un exemple pour ceux qui aimerais voire a quoi sa ressemble simplement.Se topic n'a pour seul but d'aidé un debutant (dans le domaine des WS REST) a concevoire un WS en fonction de sont besoin.J'aimerai simplement evité de partir en HS sur un debat qui est a coté de la plaque.

Y a un mais ? Je comprends pas bien ta phrase.

Oui autant pour moi, en faite j'ai modifier mon poste a plusieur rerprise car je le trouvé trop agressif et j'ai oublié de faire certaine correction, en faite je voulai dire que malgré les perf, la simplicité, etc... de la platforme .NET sa n'était pas pour autant que c'était THE réfférence malgré les avantage, il y a certaine chose que je fais beaucoup plus facillement en PHP par exemple.En gros le message que je voulais faire passé, c'est qu'aux dela des message marketing comme quoi tel techno c'est la reference etc... il n'y aucun language qui surpace les autre ni de techno qui surpace les autre, on a juste des chose plus ou moin adapté a certain besoin.

Modifié par goldbergg, 13 septembre 2012 - 18:23.

  • 0

#22
toninio23

  • messages 1
  • Inscrit(e) : 09 mars 2013

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)
Hello,ton lien pour le téléchargement de ton fichier ZIP ne fonctionne plus,est ce que tu pourrais le mettre en download.J'ai un projet pour mon travail de concevoir un WebService avec Rest, je ne comprends pas tout pour l'instant et je pense que ton code pourrait m'aider énormément.D'avance merci pour ta réponse, avec mes meilleures salutations.Toninio23
  • 0

#23
Tornado

      God’s in his heaven, all’s right with the world

  • messages 1 085
  • Inscrit(e) : 19 janvier 2012

  • Humeur du actuel : Vegged Out

Réputation : 76 (Se fait un nom)
Quand je vois la complexité de la chose, c'est là où je me dis que j'ai bien fais de pas prendre développement (avec du web service) comme option.
  • 0

131222073057808347.png

Spoiler

#24
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)
http://goldbergg.free.fr/FILES/Dans se lien il y a deux fichier, le ressource avec les code de base et Uwamp, c'est un server wamp preconfigurer avec le WSJe suis désolé pour les liens, il y a un blaireau qui s'amuse a piraté mon server, il a toujour pas compris que je ne l'utilisé plus, normalement d'ici le moi prochain je devrais avoir mon nouveau server avec cette fois beaucoup plus de protection contre les attaquesi les liens repante d'ici la contacté moi par MP pour me prevenir
  • 0

#25
begin

  • messages 1
  • Inscrit(e) : 30 août 2013

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)

Bonsoir,

 

Recherchant de la documentation sur les WerServices, je constate malheureusement que le fichier Ressource.zip n'est plus accessible...

 

 

Merci !


  • 0

#26
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)

Bonjour,

 

Voici le lien que je vien de réup:

http://jheberg.net/captcha/ressource/
 

Et voici un package avec Uwamp préconfigurer et pres a l'emploie

http://jheberg.net/captcha/uwamp/
 
EDIT: Les source sont aussi consultable en ligne ici (en beta) : http://gold-s.fr/Labo?path=%2FRESSOURCES%2FWEBSERVICE

Modifié par goldbergg, 10 septembre 2013 - 09:58.

  • 0

#27
mambokido

  • messages 1
  • Inscrit(e) : 30 décembre 2013

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)

Bonjour,

 

Merci pour ce tuto.

Je suis débutant dans la programmation (PHP) et je voulais justement tester de créer un webservice REST en PHP. Cependant j'ai une question sans réponse sur Google.

Je suis en train de développer une application mobile (HTML5/jQuery Mobile/PhoneGap). Je voudrais donc consommer mon futur WS depuis mon webapp mais je souhaiterais que seul mon webapp ait l'autorisation de le faire. Et là, je sèche complétement. Pouvez-vous m'aider ou m'indiquer des liens ?

 

Merci encore pour ce tuto. (je vais le tester demain :) ).

 

A bientôt


  • 0

#28
samir_822002

  • messages 2
  • Inscrit(e) : 11 octobre 2016

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]http://jheberg.net/captcha/ressource/
[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]et [/color]http://jheberg.net/captcha/uwamp/

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]

 

 


  • 0

#29
samir_822002

  • messages 2
  • Inscrit(e) : 11 octobre 2016

  • Humeur du actuel : Aucun choisi

Réputation : 0 (Neutre)

Hello,

ton[lirelasuite][/lirelasuite]lien[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]téléchargement[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]ton[lirelasuite][/lirelasuite]fichier[lirelasuite][/lirelasuite]ZIP[lirelasuite][/lirelasuite]ne[lirelasuite][/lirelasuite]fonctionne[lirelasuite][/lirelasuite]plus,
est[lirelasuite][/lirelasuite]ce[lirelasuite][/lirelasuite]que[lirelasuite][/lirelasuite]tu[lirelasuite][/lirelasuite]pourrais[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]mettre[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]download.

J'ai[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]projet[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]travail[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]concevoir[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]WebService[lirelasuite][/lirelasuite]avec[lirelasuite][/lirelasuite]Rest,[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]ne[lirelasuite][/lirelasuite]comprends[lirelasuite][/lirelasuite]pas[lirelasuite][/lirelasuite]tout[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]l'instant[lirelasuite][/lirelasuite]et[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]pense[lirelasuite][/lirelasuite]que[lirelasuite][/lirelasuite]ton[lirelasuite][/lirelasuite]code[lirelasuite][/lirelasuite]pourrait[lirelasuite][/lirelasuite]m'aider[lirelasuite][/lirelasuite]énormément.

D'avance[lirelasuite][/lirelasuite]merci[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]ta[lirelasuite][/lirelasuite]réponse,[lirelasuite][/lirelasuite]avec[lirelasuite][/lirelasuite]mes[lirelasuite][/lirelasuite]meilleures[lirelasuite][/lirelasuite]salutations.

Toninio23

 

 

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]ressource.zip
et uwamp

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]

Hello,

ton[lirelasuite][/lirelasuite]lien[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]téléchargement[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]ton[lirelasuite][/lirelasuite]fichier[lirelasuite][/lirelasuite]ZIP[lirelasuite][/lirelasuite]ne[lirelasuite][/lirelasuite]fonctionne[lirelasuite][/lirelasuite]plus,
est[lirelasuite][/lirelasuite]ce[lirelasuite][/lirelasuite]que[lirelasuite][/lirelasuite]tu[lirelasuite][/lirelasuite]pourrais[lirelasuite][/lirelasuite]le[lirelasuite][/lirelasuite]mettre[lirelasuite][/lirelasuite]en[lirelasuite][/lirelasuite]download.

J'ai[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]projet[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]mon[lirelasuite][/lirelasuite]travail[lirelasuite][/lirelasuite]de[lirelasuite][/lirelasuite]concevoir[lirelasuite][/lirelasuite]un[lirelasuite][/lirelasuite]WebService[lirelasuite][/lirelasuite]avec[lirelasuite][/lirelasuite]Rest,[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]ne[lirelasuite][/lirelasuite]comprends[lirelasuite][/lirelasuite]pas[lirelasuite][/lirelasuite]tout[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]l'instant[lirelasuite][/lirelasuite]et[lirelasuite][/lirelasuite]je[lirelasuite][/lirelasuite]pense[lirelasuite][/lirelasuite]que[lirelasuite][/lirelasuite]ton[lirelasuite][/lirelasuite]code[lirelasuite][/lirelasuite]pourrait[lirelasuite][/lirelasuite]m'aider[lirelasuite][/lirelasuite]énormément.

D'avance[lirelasuite][/lirelasuite]merci[lirelasuite][/lirelasuite]pour[lirelasuite][/lirelasuite]ta[lirelasuite][/lirelasuite]réponse,[lirelasuite][/lirelasuite]avec[lirelasuite][/lirelasuite]mes[lirelasuite][/lirelasuite]meilleures[lirelasuite][/lirelasuite]salutations.

Toninio23

 

 

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]ressource.zip
et uwamp

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]ressource.zip
et uwamp

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]ressource.zip
et uwamp

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]serait il possible de recuperer [/color]ressource.zip
et uwamp

[color=rgb(90,90,90);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(252,252,252);]ces fichiers là n'existent plus mnt! svp[/color]


  • 0

#30
goldbergg

  • messages 176
  • Inscrit(e) : 06 octobre 2011

  • Humeur du actuel : Aucun choisi

Réputation : 51 (Se fait un nom)

Bonjour,Les fichiers ressource sont dispo ici : http://gold-s.net/La...RVICE/ressource (le package UWAMP n'est plus dispo, il est devenue obsoléte)Attention, si l'architecture pour créer des WS REST n'a pas changer, le code JS (vielle version de jQuery) ainsi que la partie connexion à la BDD en PHP (utilisation des ancienne api mysql) sont obsolètes.Je n'est actuellement pas le temps pour réactualisé tous ça. 


  • 0





0 utilisateur(s) dans ce forum

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)

Community Forum Software by IP.Board
Licence accordée à : AnimeServ.NET
Design & Code by Bad.Y o/
© 2013 AnimeServanimeserv.net