API Fonctionnelle avec method/url/postdata/header

Fonctionnement avec manifest.json
This commit is contained in:
xdrm-brackets 2016-04-11 17:08:46 +02:00
parent a9f6b189be
commit 7a57bf96af
4 changed files with 123 additions and 38 deletions

View File

@ -15,6 +15,14 @@
private $config_path = 'f/json/manifest/api'; private $config_path = 'f/json/manifest/api';
public $error; public $error;
// liste des methodes
public static $METHODS = array(
'POST' => array( CURLOPT_POST, true ),
'GET' => array( CURLOPT_HTTPGET, true ),
'PUT' => array( CURLOPT_CUSTOMREQUEST, 'PUT' ),
'DELETE' => array( CURLOPT_CUSTOMREQUEST, 'DELETE' )
);
/*************/ /*************/
/* ATTRIBUTS */ /* ATTRIBUTS */
/*************/ /*************/
@ -61,51 +69,122 @@
/* ENVOI ET CONSTRUCTION D'UNE REQUETE
*
* @request_name<String> Nom de la requete en question
* @parameters<Array> Liste des parametres de la requete
*
* @return response<Array> Reponse HTTP au format norme ou FAUX si une erreur occure
*
*/
public function send($request_name, $parameters=array()){
/* [1] On construit la requete avec les parametres
=========================================================*/
$build = $this->build($request_name, $parameters);
// Si la construction a echoue, on retourne une erreur
if( $build === false ) return false;
/* [2] Header et pre-data de la requete
=========================================================*/
/* (1) On definit l'URL */
$curl = curl_init($build['url']);
// permet de recupere le resultat au lieu de l'afficher
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
/* (2) On definit la methode */
$method_arguments = self::$METHODS[ $build['method'] ];
curl_setopt($curl, $method_arguments[0], $method_arguments[1]);
/* (3) On definit les headers */
$headers = array();
// On construit le header au bon format : 'name: value'
foreach($build['headers'] as $name=>$value)
array_push($headers, $name.': '.$value);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
/* (4) On definit les donnees POST */
$postdata = '';
// On formatte les donnees au format 'key=value&key=value'
foreach($build['postdata'] as $key=>$value)
$postdata .= $key.'='.$value.'&';
rtrim($postdata); // on supprime le '&' a la fin s'il y a
// On envoie les donnees
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
/* [4] Execution de la requete et recup de la response
=========================================================*/
$response = curl_exec($curl);
curl_close($curl);
/* [5] On retourne la reponse
=========================================================*/
return $response;
}
/* CONSTRUCTION D'UNE REQUETE /* CONSTRUCTION D'UNE REQUETE
* *
* @request_name<String> Nom de la requete * @request_name<String> Nom de la requete
* @parameters<Array> Liste des parametres de la requete * @parameters<Array> Liste des parametres de la requete
* *
* @return response<Array> Reponse HTTP au format norme ou FAUX si une erreur occure * @return filledRequest<Array> Renvoie la requete avec les bons parametres
* *
*/ */
public function send($request_name, $parameters=array()){ private function build($request_name, $parameters=array()){
/* [0] Gestion des INPUTS /* [0] Gestion des INPUTS
=========================================================*/ =========================================================*/
// On retourne une erreur si la requete n'existe pas // On retourne une erreur si la requete n'existe pas
if( !isset($this->requests[$request_name]) ) return false; if( !isset($this->requests[$request_name]) ) return false;
// On enregistre une copie de la requete
/* [1] Remplacement des parametres (valeurs globales)
=========================================================*/
/* (1) On enregistre une copie de la requete */
$request = $this->requests[$request_name]; $request = $this->requests[$request_name];
/* (2) Remplacement dans l'URL */
/* [1] Gestion de la methode
=========================================================*/
// Si la methode n'est pas prise en compte, on retourne une erreur
if( !isset( self::$METHODS[$request['method']] ) ) return false;
/* [2] Remplacement des parametres (valeurs globales)
=========================================================*/
/* (1) Remplacement dans l'URL */
$request['url'] = $this->fillParameters($request['url'], $parameters); $request['url'] = $this->fillParameters($request['url'], $parameters);
/* (3) Remplacement dans les headers */ /* (2) Remplacement dans les headers */
foreach($request['headers'] as $name=>$value) foreach($request['headers'] as $name=>$value)
$request['headers'][$name] = $this->fillParameters($value, $parameters); $request['headers'][$name] = $this->fillParameters($value, $parameters);
/* (3) Remplacement dans les postdata */ /* (2) Remplacement dans les postdata */
foreach($request['postdata'] as $name=>$value) foreach($request['postdata'] as $name=>$value)
$request['postdata'][$name] = $this->fillParameters($value, $parameters); $request['postdata'][$name] = $this->fillParameters($value, $parameters);
/* [2] On remplace dans les valeurs d'I/O /* [3] Retour de la requete construite
=========================================================*/ =========================================================*/
/* (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; return $request;
} }

View File

@ -2,24 +2,30 @@
"name": "socioview_api", "name": "socioview_api",
"version": "0.1", "version": "0.1",
"description": "API de la plateforme d'acquisition et de visualisation de donnees dans le cadre d'etudes relationnelles en sociologie", "description": "API de la plateforme d'acquisition et de visualisation de donnees dans le cadre d'etudes relationnelles en sociologie",
"requests": { "requests": {
"parse-call-log": { "parse-call-log": {
"url": "socioview/api/", "url": "socioview/api/",
"method": "POST", "method": "POST",
"headers": { "Authorization": "Digest @token" }, "headers": { "Authorization": "Digest @token" },
"postdata": { "username": "@username", "password": "@password" }, "postdata": {
"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.", "path": "call_log/unserialize",
"data": "[@xmlstring]"
},
"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"}, "generate-network-chart-data": {
{"data": "json"} "url": "socioview/api/",
] "method": "POST",
"headers": { "Authorization": "Digest @token" },
"postdata": {
"path": "charts/network_data"
},
"description": "Renvoie un jeu de donnees pour un graphique de type network"
} }
} }

View File

@ -59,7 +59,7 @@
foreach($sms as $v) foreach($sms as $v)
var_dump( $v[0] ." (".$contact[$v[0]].") \t\t\t". $v[1] ." appels"); var_dump( $v[0] ." (".$contact[$v[0]].") \t\t\t". $v[1] ." appels");
var_dump("\n\n\nOBJET COMPLET"); var_dump("\n\n\nOBJET COMPLET");
var_dump( $sms ); var_dump( $sms );
var_dump( $call ); var_dump( $call );
@ -73,10 +73,11 @@
$api = new client(); $api = new client();
var_dump( $api->send('parse-call-log', array(
'@token'=> 'bb21158c733229347bd4e681891e213d94c685bf', $response = $api->send('generate-network-chart-data', array(
'@username' => 'xdrm', '@token'=> '48e701d4e72e4e35bc37c9a800b49d5400734d7b'
'@password'=> 'mypassword' ));
) ));
var_dump($response);
?> ?>

View File

@ -40,7 +40,6 @@ var TOKEN = {
// On lance la requete // On lance la requete
api.send(request, function(answer){ api.send(request, function(answer){
console.log(answer);
// Si la generation effectuee, on recharge la page // Si la generation effectuee, on recharge la page
if( answer.ModuleError == 0 ) if( answer.ModuleError == 0 )
reload(); reload();