Différences entre versions de « Exemples d'utilisation de l'API »

De Ikoula Wiki
Jump to navigation Jump to search
Ligne 18 : Ligne 18 :
  
  
==Introduction== <!--T:1-->
+
==Introduction==
 
Comment utiliser l'API à travers quelques exemples concrets et fonctionnels.
 
Comment utiliser l'API à travers quelques exemples concrets et fonctionnels.
  
==Fonctions pour les exemples== <!--T:2-->
+
==Fonctions pour les exemples==
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
 
// Chemin local vers la clé publique téléchargée sur http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem
 
// Chemin local vers la clé publique téléchargée sur http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem
 
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem');
 
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem');
  
<!--T:3-->
 
 
// Fonction de chiffrement du mot de passe via la clé publique Ikoula
 
// Fonction de chiffrement du mot de passe via la clé publique Ikoula
 
function opensslEncryptPublic($password)
 
function opensslEncryptPublic($password)
Ligne 38 : Ligne 37 :
 
$publicKey = openssl_pkey_get_public('file://'.realpath(API_PUB_KEY_PATH));
 
$publicKey = openssl_pkey_get_public('file://'.realpath(API_PUB_KEY_PATH));
  
<!--T:4-->
 
 
// S'il n'y as pas eu d'erreurs lors de la récupération de la clé publique, on continue
 
// S'il n'y as pas eu d'erreurs lors de la récupération de la clé publique, on continue
 
if ($publicKey !== FALSE)       
 
if ($publicKey !== FALSE)       
Ligne 66 : Ligne 64 :
 
}
 
}
  
<!--T:5-->
 
 
// Fontction de création de la signature en fonction des paramètres présents
 
// Fontction de création de la signature en fonction des paramètres présents
 
function createSignature($params=array())
 
function createSignature($params=array())
Ligne 72 : Ligne 69 :
 
     $signature = null;
 
     $signature = null;
  
    <!--T:6-->
 
 
// Si il y a au moins un paramètre
 
// Si il y a au moins un paramètre
 
     if (count($params) > 0)
 
     if (count($params) > 0)
Ligne 85 : Ligne 81 :
 
         $query = http_build_query($params);
 
         $query = http_build_query($params);
  
        <!--T:7-->
 
 
// Encodage des signes "plus "+"
 
// Encodage des signes "plus "+"
 
         $query = str_replace("+", "%20", $query);
 
         $query = str_replace("+", "%20", $query);
  
        <!--T:8-->
 
 
// Transformation de la chaîne de caractères en minuscule
 
// Transformation de la chaîne de caractères en minuscule
 
         $query = strtolower($query);
 
         $query = strtolower($query);
  
        <!--T:9-->
 
 
$public_key = "";
 
$public_key = "";
 
         // Si le fichier existe, on va récupérer la clé
 
         // Si le fichier existe, on va récupérer la clé
Ligne 107 : Ligne 100 :
 
         }
 
         }
  
        <!--T:10-->
 
 
// Hashage des paramètres
 
// Hashage des paramètres
 
         $hash = hash_hmac("SHA1", $query, $public_key, true);
 
         $hash = hash_hmac("SHA1", $query, $public_key, true);
  
        <!--T:11-->
 
 
// Encodage en base64
 
// Encodage en base64
 
         $signature = base64_encode($hash);
 
         $signature = base64_encode($hash);
 
     }
 
     }
  
    <!--T:12-->
 
 
return $signature;
 
return $signature;
 
}
 
}
  
<!--T:13-->
 
 
// Fonction facilitant l'envoie des requêtes vers l'API Ikoula
 
// Fonction facilitant l'envoie des requêtes vers l'API Ikoula
 
function send_request ($rest, $url_param, $params=array())
 
function send_request ($rest, $url_param, $params=array())
Ligne 135 : Ligne 124 :
  
 
 
<!--T:14-->
 
 
// si on est en REST on rajoute le type d'appel (POST,DELETE,PUT,GET,...) sinon on passe en POST
 
// si on est en REST on rajoute le type d'appel (POST,DELETE,PUT,GET,...) sinon on passe en POST
 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ($rest)?$rest:"POST");
 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ($rest)?$rest:"POST");
Ligne 169 : Ligne 157 :
 
curl_close($ch);
 
curl_close($ch);
  
<!--T:15-->
 
 
// retourne la réponse
 
// retourne la réponse
 
return($data);
 
return($data);
Ligne 177 : Ligne 164 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Appels API== <!--T:16-->
+
==Appels API==
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
 
//login
 
//login
Ligne 183 : Ligne 170 :
 
//on crypte le mot de passe
 
//on crypte le mot de passe
 
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER'));
 
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER'));
 
<!--T:17-->
 
 
//liste des VM - retour en JSON
 
//liste des VM - retour en JSON
  
<!--T:18-->
 
 
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
 
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
 
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
 
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
Ligne 200 : Ligne 184 :
 
print_r($data2); //appel REST
 
print_r($data2); //appel REST
  
<!--T:19-->
 
 
//informations d'une VM - retour en XML
 
//informations d'une VM - retour en XML
  
<!--T:20-->
 
 
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
 
//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
 
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'xml', 'subscr_id' => 12345);
 
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'xml', 'subscr_id' => 12345);
Ligne 218 : Ligne 200 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Erreurs usuelles== <!--T:21-->
+
==Erreurs usuelles==
 
;Permission Denied
 
;Permission Denied
 
: Signifie que l'utilisateur utilisé dans l'API n'a pas le droit d'accéder à l'information demandée ou d'effectuer l'action souhaitée.
 
: Signifie que l'utilisateur utilisé dans l'API n'a pas le droit d'accéder à l'information demandée ou d'effectuer l'action souhaitée.
Ligne 229 : Ligne 211 :
 
<br />D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée.
 
<br />D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée.
  
<!--T:22-->
 
 
<!-- Fin de l'article -->
 
<!-- Fin de l'article -->
 
<br /><br />
 
<br /><br />
Ligne 238 : Ligne 219 :
 
[[Catégorie:API]]
 
[[Catégorie:API]]
  
<!--T:23-->
 
 
<!-- Gestion SEO. Indiquez les informations manquantes -->
 
<!-- Gestion SEO. Indiquez les informations manquantes -->
 
<br />
 
<br />
 
<comments />
 
<comments />

Version du 19 octobre 2016 à 11:40

he:דוגמאות לשימוש ה-API ro:Exemple de utilizare a API ru:Примеры использования API pl:Przykłady użycia interfejsu API ja:API を使用しての例 ar:أمثلة لاستخدام API zh:使用该 API 的示例 de:Beispiele für die Verwendung der API nl:Voorbeelden van het gebruik van de API it:Esempi di utilizzo dell'API pt:Exemplos de como usar a API es:Ejemplos de uso de la API en:Examples of using the API



Introduction

Comment utiliser l'API à travers quelques exemples concrets et fonctionnels.

Fonctions pour les exemples

// Chemin local vers la clé publique téléchargée sur http://api.ikoula.com/downloads/Ikoula.API.RSAKeyPub.pem
define('API_PUB_KEY_PATH', dirname(__FILE__) . '/Ikoula.API.RSAKeyPub.pem');

// Fonction de chiffrement du mot de passe via la clé publique Ikoula
function opensslEncryptPublic($password)
{
	// Vérification de la présence de la clé publique
	if(file_exists(API_PUB_KEY_PATH))
	{
		if(!empty($password))
		{
			// on récupère la clé public
			$publicKey = openssl_pkey_get_public('file://'.realpath(API_PUB_KEY_PATH));

// S'il n'y as pas eu d'erreurs lors de la récupération de la clé publique, on continue
			if ($publicKey !== FALSE)      
			{
				// Si chiffrement clé publique OK
				if(openssl_public_encrypt($password, $crypted, $publicKey) === TRUE)   
				{
					// Renvoie du mot de passe crypté
					return $crypted;       
				}
				else
				{
					return NULL;
				}
			}
			else
				return NULL;
		}
		else
			return NULL;
	}
	else
	{
		echo("Erreur - la clé publique n'est pas présente.\n");
		return NULL;
	}
}

// Fontction de création de la signature en fonction des paramètres présents
function createSignature($params=array())
{
    $signature = null;

// Si il y a au moins un paramètre
    if (count($params) > 0)
    {
        //debug('create signature');
        //debug($params);
        
        // Triage des paramètres dans le sens croissant
        ksort($params);
        
        // Encodage des paramètres
        $query = http_build_query($params);

// Encodage des signes "plus "+"
        $query = str_replace("+", "%20", $query);

// Transformation de la chaîne de caractères en minuscule
        $query = strtolower($query);

$public_key = "";
        // Si le fichier existe, on va récupérer la clé
        if (file_exists(API_PUB_KEY_PATH))
        {
            $public_key = trim(
                    str_replace(
                            array("\n", '-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----'), 
                            array('', '', ''), 
                            file_get_contents(API_PUB_KEY_PATH)
                        )
                    );
        }

// Hashage des paramètres
        $hash = hash_hmac("SHA1", $query, $public_key, true);

// Encodage en base64
        $signature = base64_encode($hash);
    }

return $signature;
}

// Fonction facilitant l'envoie des requêtes vers l'API Ikoula
function send_request ($rest, $url_param, $params=array())
{
	// initialisation de CURL
	$ch = curl_init();
	if($ch)
	{
		// Si on a des info on utilise l'api REST sinon on utilise l'api standard (WebService)
		if($rest)
			$url = "https://api.ikoula.com/rest/" . $url_param;
		else 
			$url = "https://api.ikoula.com/?r=" . $url_param;

		
// si on est en REST on rajoute le type d'appel (POST,DELETE,PUT,GET,...) sinon on passe en POST
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ($rest)?$rest:"POST");
		// Si il y a des paramètres on les rajoute dans la requête
		if(is_array($params) && count($params) > 0)
		{
			$params_str = http_build_query($params);
		}
		if($rest=='POST')
		{
			// on rentre le nom de paramètre présent dans la requête
			curl_setopt($ch,CURLOPT_POST, true);
			curl_setopt($ch,CURLOPT_POSTFIELDS, $params_str);
		}
		else
		{
			$url .= (strpos($url,'?') === false ? '?' : '&').$params_str;
		}
			
		// On ajoute l'url
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
		curl_setopt($ch, CURLOPT_HEADER, 1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
		// on vire les en-tête HTTP pour avoir directement le retour
		curl_setopt($ch, CURLOPT_HEADER, false);
	   
		// exécution de la requête
		$data = curl_exec($ch);
	   
		// fermeture de l'objet
		curl_close($ch);

// retourne la réponse
		return($data);
	}
	return null;
}

Appels API

//login
$login = 'mail@test.com';
//on crypte le mot de passe
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER'));
//liste des VM - retour en JSON

//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'json');
//on génère la signature
$signature = createSignature($parameters);
//on ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
//on fait l'appel API
$data = send_request(false,'wsflex/vmlist',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','vm/list',$parameters);
print_r($data2); //appel REST

//informations d'une VM - retour en XML

//liste des paramètres que l'on souhaite envoyer à l'API (pour générer la signature)
$parameters = array('login' => $login, 'crypted_password' => $crypted_password, 'format' => 'xml', 'subscr_id' => 12345);
//on génère la signature
$signature = createSignature($parameters);
//on ajoute la signature dans les paramètres à envoyer lors de l'appel à l'API
$parameters['signature'] = $signature;
//on fait l'appel API
$data = send_request(false,'wsflex/vminfo',$parameters);
print_r($data); //appel WebService
$data2 = send_request('GET','vm/'.$parameters['subscr_id'],$parameters);
print_r($data2); //appel REST

Erreurs usuelles

Permission Denied
Signifie que l'utilisateur utilisé dans l'API n'a pas le droit d'accéder à l'information demandée ou d'effectuer l'action souhaitée.
Unable to decrypt password
Signifie que le paramètre crypted_password a été mal crypté ou corrompu.
Invalid credentials
Signifie que l'authentification a échoué et que l'utilisateur n'est donc pas reconnu.
Invalid or missing signature
Signifie que la signature n'est pas présente dans les paramètres reçus par l'API, ou que celle-ci est invalide.


D'autres remontées d'erreurs sont possibles mais seront contextuelles en fonction de la fonctionnalité souhaitée.



Cet article vous a semblé utile ?

0



Vous n'êtes pas autorisé à publier de commentaire.