Description du retour * */ class client{ // Fichier de configuration par defaut private $config_path = 'f/json/manifest/api'; public $error; /*************/ /* ATTRIBUTS */ /*************/ private $manifest = null; // Contiendra le tableau correspondant au JSON private $requests = array(); // Contiendra la liste des requetes de l'api et leurs parametres private $name; private $description; private $version; /* CONSTRUCTEUR DU CLIENT DE L'API * * @config Chemin du fichier de configuration de l'api * */ public function __construct($config=null){ /* [0] Gestion du fichier de config si donne en param =========================================================*/ if( $config !== null ) $this->config_path = $config; /* [1] On recupere le contenu du fichier de config =========================================================*/ $manifest = json_decode( ResourceDispatcher::getResource($this->config_path), true ); // Si erreur de parsage ou de fichier, on retourne une erreur if( $manifest === null ){ $this->error = ManagerError::ParsingFailed; return; } /* [2] On repartie et classe les donnees =========================================================*/ /* (1) Informations generales */ $name = $manifest['name']; $description = $manifest['description']; $version = $manifest['version']; /* (2) Liste des requetes */ $this->requests = $manifest['requests']; } /* CONSTRUCTION D'UNE REQUETE * * @request_name Nom de la requete * @parameters Liste des parametres de la requete * * @return response Reponse HTTP au format norme ou FAUX si une erreur occure * */ public function send($request_name, $parameters=array()){ /* [0] Gestion des INPUTS =========================================================*/ // On retourne une erreur si la requete n'existe pas if( !isset($this->requests[$request_name]) ) return false; /* [1] Remplacement des parametres (valeurs globales) =========================================================*/ /* (1) On enregistre une copie de la requete */ $request = $this->requests[$request_name]; /* (2) Remplacement dans l'URL */ $request['url'] = $this->fillParameters($request['url'], $parameters); /* (3) Remplacement dans les headers */ foreach($request['headers'] as $name=>$value) $request['headers'][$name] = $this->fillParameters($value, $parameters); /* (3) Remplacement dans les postdata */ foreach($request['postdata'] as $name=>$value) $request['postdata'][$name] = $this->fillParameters($value, $parameters); /* [2] On remplace dans les valeurs d'I/O =========================================================*/ /* (1) Remplacement dans les INPUT */ foreach($request['input'] as $i=>$input) foreach($input as $name=>$value) $request['input'][$i][$name] = $this->fillParameters($value, $parameters); /* (2) Remplacement dans les OUTPUT */ foreach($request['output'] as $i=>$output) foreach($output as $name=>$value) $request['output'][$i][$name] = $this->fillParameters($value, $parameters); return $request; } /* REMPLACE LES PARAMETRES DANS UNE CHAINE * * @before Chaine a etudier et dans laquelle remplacer les parametres * @parameters Liste des parametres a remplacer (prefixes d'un '@') * * @return after Chaine contenant les parametres de la liste @parameters * */ private function fillParameters($before, $parameters){ // On initialise la valeur de retour $after = $before; /* [1] On remplace les parametres prefixes par '@' =========================================================*/ foreach($parameters as $name=>$value){ $position = strpos($after, $name); // Si on a trouve, on remplace le nom de variable par la valeur if( $position !== false ) $after = substr($after, 0, $position) . $value . substr($after, $position+strlen($name) ); } /* [2] On retourne la nouvelle chaine =========================================================*/ return $after; } } ?>