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';
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 */
/*************/
@ -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
*
* @request_name<String> Nom 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
=========================================================*/
// 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 */
// On enregistre une copie de la requete
$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);
/* (3) Remplacement dans les headers */
/* (2) Remplacement dans les headers */
foreach($request['headers'] as $name=>$value)
$request['headers'][$name] = $this->fillParameters($value, $parameters);
/* (3) Remplacement dans les postdata */
/* (2) 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
/* [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;
}

View File

@ -2,24 +2,30 @@
"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": {
"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.",
"postdata": {
"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"},
{"data": "json"}
]
"generate-network-chart-data": {
"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

@ -73,10 +73,11 @@
$api = new client();
var_dump( $api->send('parse-call-log', array(
'@token'=> 'bb21158c733229347bd4e681891e213d94c685bf',
'@username' => 'xdrm',
'@password'=> 'mypassword'
) ));
$response = $api->send('generate-network-chart-data', array(
'@token'=> '48e701d4e72e4e35bc37c9a800b49d5400734d7b'
));
var_dump($response);
?>

View File

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