From a9f6b189bee3f62da7b346de291299aa89607263 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 11 Apr 2016 16:05:32 +0200 Subject: [PATCH] Gestion du prototype + gestion des variables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le format de base a été établi. Les variables préfixées par '@' sont remplacés dans la requête, il reste la gestion des requêtes et des réponses en elles-mêmes. --- api/client.php | 146 ++++++++++++++++++++++++++++++++++++ api/manifest.default.json | 39 ++++++++++ api/manifest.json | 18 +++-- automate.php | 13 +++- config/dispatcher-tree.json | 2 + 5 files changed, 212 insertions(+), 6 deletions(-) create mode 100644 api/client.php create mode 100644 api/manifest.default.json diff --git a/api/client.php b/api/client.php new file mode 100644 index 0000000..143e641 --- /dev/null +++ b/api/client.php @@ -0,0 +1,146 @@ + 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; + } + + } + + +?> \ No newline at end of file diff --git a/api/manifest.default.json b/api/manifest.default.json new file mode 100644 index 0000000..cf8fa33 --- /dev/null +++ b/api/manifest.default.json @@ -0,0 +1,39 @@ +{ + "name": "@api_name", + "version": "@api_version_number", + "description": "@api_description", + + "requests": { + + "@request_name":{ + "url": "@request_request_url", + "headers": { + "@header_name_1": "@header_value_1", + "@header_name_2": "@header_value_2", + }, + "method": "@request_http_method", + "description": "@request_description", + + "input": { + "@input_variable1_name" : "@input_default1_value", + "@input_variable2_name" : "@input_default2_value", + "@input_variable..._name": "@input_default..._value", + + "@input_variableA_name" : "<@input_variableA_type>", + "@input_variableB_name" : "<@input_variableB_type>", + "@input_variable..._name": "<@input_variable..._type>", + }, + + "output": { + "@output_variable1_name" : "<@output_variable1_type>", + "@output_variable2_name" : "<@output_variable2_type>", + "@output_variable..._name": "<@output_variable..._type>", + } + } + + } + + + +} + diff --git a/api/manifest.json b/api/manifest.json index 5311b50..7f7f9f0 100644 --- a/api/manifest.json +++ b/api/manifest.json @@ -2,17 +2,25 @@ "name": "socioview_api", "version": "0.1", "description": "API de la plateforme d'acquisition et de visualisation de donnees dans le cadre d'etudes relationnelles en sociologie", - "requests": { - "parse-call-log":{ + "parse-call-log": { "url": "socioview/api/", "method": "POST", + "headers": { "Authorization": "Digest @token" }, + "postdata": { "username": "@username", "password": "@password" }, "description": "Renvoie a partir du contenu d'un fichier de journal d'appel XML un objet classant les relations SMS/MMS par nombre de messages recus et emis, et de meme pour les appels classes par nombre d'appels.", - "input": { "path": "callLog/unserialize", "data": "array" }, - "output": { "ModuleError": "int", "data": "json" } - } + "input": [ + {"path": "callLog/unserialize"}, + {"data": "array"} + ], + + "output": [ + {"ModuleError": "int"}, + {"data": "json"} + ] + } } diff --git a/automate.php b/automate.php index 1014be3..8406b43 100755 --- a/automate.php +++ b/automate.php @@ -7,6 +7,7 @@ use \manager\ManagerError; use \manager\Repo; + use \api\client; @@ -65,7 +66,17 @@ var_dump( $contact ); } - parseCallLog(); + // parseCallLog(); + debug(); + + + + $api = new client(); + var_dump( $api->send('parse-call-log', array( + '@token'=> 'bb21158c733229347bd4e681891e213d94c685bf', + '@username' => 'xdrm', + '@password'=> 'mypassword' + ) )); ?> \ No newline at end of file diff --git a/config/dispatcher-tree.json b/config/dispatcher-tree.json index f72aee7..f49811d 100755 --- a/config/dispatcher-tree.json +++ b/config/dispatcher-tree.json @@ -1,4 +1,6 @@ { + "api" : "/api", + "st" : "/src/static", "dy" : "/src/dynamic",