IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

réponse complexe d'un web-service


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut réponse complexe d'un web-service
    Bonjour,
    J'ai commencé à développer un web-service.
    Pour l'instant la réponse retournée est de type string contenant un json qui est analysée par le client.
    Pas top, Je souhaiterais qu'il puisse me retourner une réponse "complexe" structurée comme ci-dessous :

    success : type boolean
    nbLignes : type int
    donnees : doit être un tableau pouvant contenir un type complexe "donnée"

    Enfin le type donnée doit-être structuré comme suivant :
    champ : type string
    valeur : type string

    malheureusement je ne sais pas comment structurer la/les classes dans mon code pour arriver au résultat.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    J'ai trouvé une solution, il suffisait simplement dans la classe du WS de définir la réponse comme objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /**
    *
    * @param authentification $authentification
    * @param string $profil
    * @return object
    */
    function interrogationProfil($authentification,$profil){
    ......
    }
    Après dans le code j'ai simplement traité des tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return(array("success"=>true,"nbLignes"=>$nbLignes,"donnees"=>$datas));
    $datas étant elle même un tableau

    Pour le wsdl, il est généré dynamiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    require_once('Zend/Soap/AutoDiscover.php');  
    require_once('Zend/Soap/Server.php');
    require_once('../php/webservice/tamara.php'); 
     
    if(isset($_GET['wsdl'])){
    	$wsdl = new Zend_Soap_AutoDiscover();  
      	$wsdl->setClass('tamara');  
       	$wsdl->handle();
    }
    else{
    	$serveur = new Zend_Soap_Server('http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'?wsdl');  
       	$serveur->setClass('tamara');  
       	$serveur->handle();
    }
    ce qui produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
    <message name="interrogationProfilOut">
    	<part name="return" type="xsd:struct"/>
    </message>
    ....
    Pourquoi chercher loin des solutions simples....

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Je suis totalement à l'ouest,

    Ce n'est pas un objet mais un tableau qui est renvoyé.

    C'est mieux avec ceci

    Création d'une classe donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class donnee{
    	/** @var string */
    	public $champ;
    	/** @var string */
        	public $valeur;
    }
    Création d'une classe retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class retour{
    	/** @var bool */
    	public $success;
    	/** @var integer */
        	public $nbLignes;
    	/** @var array */
    	public $donnees;
    }
    Dans la code de WS création de la collection d'objet donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $nbLignes=0;
    while($ligne=$sth->fetch(PDO::FETCH_ASSOC)){
    	$j=0;
    	foreach ($ligne as $valeur){
    		$data= new donnee();
    		$data->champ=$listeTablesDonnees[$j];
    		$data->valeur=$valeur;
    		$j++;
    	}
    	$datas[]=$data;
    }
    Enfin création de l'objet retour envoyé au client du WS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $retour= new retour();
    $retour->success=true;
    $retour->nbLignes=$nbLignes;
    $retour->donnees=$datas;
    return($retour);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Web Service] Appel web service avec type complexe
    Par foujino dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/05/2011, 17h30
  2. Appel d'un web service retournant un objet complexe
    Par yayasam dans le forum Services Web
    Réponses: 5
    Dernier message: 24/03/2011, 12h48
  3. Web Services avec réponse multiple
    Par mosit dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2009, 17h50
  4. [jax ws] consommer un objet complex d'une methode web service
    Par cisnake dans le forum Services Web
    Réponses: 3
    Dernier message: 05/06/2008, 08h52
  5. Réponses: 5
    Dernier message: 17/01/2008, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo