API を使用しての例

提供: Japanese Ikoula Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

ja:API を使用しての例 he:דוגמאות לשימוש ה-API ro:Exemple de utilizare a API pl:Przykłady użycia interfejsu 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 ru:Примеры использования API ar:أمثلة لاستخدام API zh:使用该 API 的示例 fr:Exemples d'utilisation de l'API

この記事は、自動翻訳ソフトウェアで行うからです。 記事のソースはここを参照してくださいすることができます。








はじめに

API を使用していくつかのコンクリートと機能の例を使用する方法。

例については、関数

// 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');

<!--T:3-->
// 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));

			<!--T:4-->
// 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;
	}
}

<!--T:5-->
// Fontction de création de la signature en fonction des paramètres présents
function createSignature($params=array())
{
    $signature = null;

    <!--T:6-->
// 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);

        <!--T:7-->
// Encodage des signes "plus "+"
        $query = str_replace("+", "%20", $query);

        <!--T:8-->
// Transformation de la chaîne de caractères en minuscule
        $query = strtolower($query);

        <!--T:9-->
$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)
                        )
                    );
        }

        <!--T:10-->
// Hashage des paramètres
        $hash = hash_hmac("SHA1", $query, $public_key, true);

        <!--T:11-->
// Encodage en base64
        $signature = base64_encode($hash);
    }

    <!--T:12-->
return $signature;
}

<!--T:13-->
// 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;

		
		<!--T:14-->
// 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);

		<!--T:15-->
// retourne la réponse
		return($data);
	}
	return null;
}

API 呼び出し

//login
$login = 'mail@test.com';
//on crypte le mot de passe
$crypted_password = base64_encode(opensslEncryptPublic('MOT_DE_PASSE_A_CRYPTER'));

<!--T:17-->
//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)
$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

<!--T:19-->
//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)
$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

一般的なエラー

アクセスが拒否されました
API で使うユーザーには要求された情報へアクセスしたり、目的の操作を実行する権利がないことを意味
パスワードを解読できません
つまり、パラメーター crypted_password 不十分な暗号化されているか破損している
無効な資格情報
認証が失敗すると、そのユーザーはないので認識
無効なまたは不足している署名
署名が API によって受け取ったパラメーターの値に存在しない、またはそれが有効であることを意味


エラーの他のリフトは可能ですが、必要な機能に応じてコンテキストになります。



この記事は気に有用であること ?

0



あなたにはコメントを投稿する権限がありません。