Problèmatique

L'idée de Soap est de permettre d'exporter des classes appellées par des clients.

Basiquement un serveur peut s'écrire de la manière suivante :

<?php
$server = new SoapServer ("some.wsdl");
$server->setClass("Foo");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $server->handle();
} else {
    echo "Ce serveur SOAP peut gérer les fonctions suivantes : ";
    $functions = $server->getFunctions();
    foreach($functions as $func) {
        echo $func . "
";
    }
}

class Foo {
    /**
     * @param $x int
     * @param $y int
     * @return int
     */
    function Add($x, $y)  {
	return $x+$y;
    }
}
?>

Un client peut donc appeller la fonction Add.

<?php
$client = new SoapClient("some.wsdl");

$res = $client->Add(1,1);
echo $res;

?>

Intégration dans copix

Dans Copix pour l'instant le module WSServer permet de traiter les requêtes et de générer le fichier WSDL en fonction de la classe exporté.

Par contres des questions se posent concernant la classe exporté.

Pour le moment celle-ci est de type CopixActionGroup, ceci permet de simplifier, dans le module WSServer, l'identification et le chargement de la classe. Par contre les fonctions de la classe exportée sont directement interpretés lors qu'un client les appelle. On ne passe donc pas par la controleur et les classes exportées peuvent être indépendantes de Copix.

L'idée serait de trouver un moyen d'exporter les classes de telle manière que l'on passe par le controleur, permettant ainsi d'utiliser l'ensemble du framework Copix. Dans ce cas on pourrait envisager une fonction qui traiterait les paramètres, identifierait le module a utiliser et renverrait un résultat.

Exemple de client :

<?php
$client = new SoapClient("http://www.monsite.com/index.php/wsserver/default/wsdl/");

$res = $client->process("module","desc","action",array("param"));
echo $res;

?>

Qu'en pensez vous?