Alibaba Cloud SDK V1.0 for PHP prend en charge les appels d'API génériques. Cette rubrique explique comment réaliser des appels génériques avec Alibaba Cloud SDK V1.0 for PHP.
Caractéristiques
Légèreté : Alibaba Cloud SDK V1.0 for PHP permet d'appeler toutes les opérations d'API en installant uniquement la bibliothèque principale du SDK, sans installer le SDK de chaque service.
Itération rapide et compatibilité : si un service cloud ne fournit pas de SDK ou si celui-ci n'intègre pas les dernières opérations d'API, recourez aux appels génériques. Vous accédez ainsi aux opérations d'API les plus récentes sans attendre la mise à jour du SDK.
Pour plus d'informations, consultez Appels génériques et appels spécialisés.
Remarques d'utilisation
Avant de réaliser un appel générique, récupérez manuellement les métadonnées requises (version de l'API, URL de la requête et type de paramètre) et spécifiez-les. Pour plus d'informations, consultez Métadonnées d'API.
Installer la bibliothèque principale d'Alibaba Cloud SDK V1.0 for PHP
Exécutez la commande suivante dans votre terminal pour installer la bibliothèque principale d'Alibaba Cloud SDK V1.0 for PHP :
composer require alibabacloud/client
Appeler une opération d'API
Initialiser un client de requête
Dans le package AlibabaCloud, créez un client pour initialiser le client de requête, puis utilisez ce client pour appeler les opérations d'API. Dans cet exemple, une paire d'AccessKey sert à initialiser le client de requête. Pour plus d'informations, consultez Gérer les identifiants d'accès.
Pour éviter toute fuite d'AccessKey, stockez la paire d'AccessKey dans des variables d'environnement. Pour plus d'informations, consultez Configurer les variables d'environnement sous Linux, macOS et Windows.
use AlibabaCloud\Client\AlibabaCloud;
// getenv indicates that the AccessKey pair obtained from environment variables is used to initialize the client.
AlibabaCloud::accessKeyClient(
getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
->regionId('cn-hangzhou') // Specify the region ID.
->asDefaultClient(); // Specify the client as the default client.
Configurer les informations de l'opération d'API et les paramètres de requête
Utilisez le client du package AlibabaCloud pour configurer les informations de base et les paramètres de requête de l'opération d'API. Pour plus d'informations sur les paramètres de requête courants, consultez Paramètres avancés.
Le module request convertit les métadonnées de l'API (numéro de version, URL, type de paramètre) en requête HTTP valide via un processus de configuration standard, puis renvoie les données de réponse brutes. La transmission des paramètres dépend du style et de la conception de l'API.
Paramètres spécifiques à l'opération
Les métadonnées de l'opération d'API déterminent la méthode de transmission d'un paramètre de requête. Par exemple, l'opération d'API DescribeInstanceStatus est définie comme {"name":"RegionId","in":"query",...}} dans les métadonnées. Ici, "in":"query" indique que l'ID de région (RegionId) doit être transmis dans options([ 'query' => [ 'key1' => 'value1'] ]).
Scénario | Méthode de transmission du paramètre |
| options([ 'query' => [ 'key1' => 'value1'] ]) Remarque Pour spécifier une collection de paires clé-valeur, utilisez le format suivant : 'query' => [ 'key.1' => 'value1','key.2' => 'value2']... |
| options([ 'form_params' => [ 'key1' => 'value1'] ]) Remarque Si le paramètre de requête n'est pas une chaîne, convertissez sa valeur en chaîne JSON et utilisez cette chaîne comme valeur de paramètre. |
// The query parameters when they are of the collection type.
$instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
// Common parameters.
$queryParams = [
'RegionId' => 'cn-hangzhou',
'PageNumber' => 1,
'PageSize' => 30,
];
// Process the collection parameters by converting them to the format of InstanceId.1, InstanceId.2.
foreach ($instanceIDs as $index => $id) {
$queryKey = 'InstanceId.' . ($index + 1);
$queryParams[$queryKey] = $id;
}
// Configure the basic information about and request parameters of the API operation.
$result = AlibabaCloud::rpc() // The API operation style, such as remote procedure call (RPC) and resource-oriented architecture (ROA).
// 1.Configure the basic information about the API operation.
->host('ecs.cn-hangzhou.aliyuncs.com')
->product('Ecs') // The service name.
->version('2014-05-26') // Make sure that the version number must be the same as that in the API reference.
->action('DescribeInstanceStatus') // The name of the API operation. When you call an RPC-style API operation, you must configure action() to specify the name of the API operation.
->method('POST') // The request method. Valid values: GET and POST.
->setProtocolType('HTTPS') // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
// ->pathPattern() // The resource path, which is required by ROA-style API operations. Do not configure this parameter for RPC-style API operations.
// 2.Configure the request parameters.
->options([
// Scenario 1: Configure query parameters.
'query' => $queryParams
// Scenario 2: Configure the request body in form_params.
// 'form_params' => [
// 'key1' => 'value1',
// 'key2' => 'value2',
// 'key3' => 'value3',
// ],
])
Envoyer une requête
Utilisez le client pour envoyer une requête en appelant la fonction request().
// Call an RPC-style API operation.
$result = AlibabaCloud::rpc()
->request()
// Call an ROA-style API operation.
// $result = AlibabaCloud::roa()
// ->request()
// If the response is of the byte type, the request ID and response parameters are returned.
print_r($result->toArray());
Exemples de code
Exemple : Appeler une opération d'API de style RPC
Cet exemple appelle l'opération DescribeRegions d'ECS pour illustrer un appel générique.
<?php
namespace AlibabaCloud\SDK\Sample;
require_once 'vendor/autoload.php';
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class Sample
{
public static function main()
{
// getenv indicates that the AccessKey pair obtained from environment variables is used to initialize the client.
AlibabaCloud::accessKeyClient(
getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
->regionId('cn-hangzhou') // Specify the region ID.
->asDefaultClient(); // Specify the client as the default client.
// Configure query parameters when they are of the collection type.
$instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
// Common parameters.
$queryParams = [
'RegionId' => 'cn-hangzhou',
'PageNumber' => 1,
'PageSize' => 30,
];
// Process the collection parameters by converting them to the format of InstanceId.1, InstanceId.2.
foreach ($instanceIDs as $index => $id) {
$queryKey = 'InstanceId.' . ($index + 1);
$queryParams[$queryKey] = $id;
}
try {
$result = AlibabaCloud::rpc()
->method('POST') // The request method.
->verify(false) // Disable certification authentication.
->debug(true) // Enable logging.
->setProtocolType('HTTPS') // Configure a protocol.
->host('ecs.cn-hangzhou.aliyuncs.com') // Configure the endpoint.
->version('2014-05-26') // Make sure that the version number must be the same as that in the API reference.
->action('DescribeInstanceStatus') // Specify the API operation name.
// Configure request parameters.
->options([
'query' => $queryParams
])
// Send the request.
->request();
print_r($result->toArray());
} catch (ClientException | ServerException $e) {
echo $e->getErrorMessage();
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}
}
}
Sample::main();
Exemple : Appeler une opération d'API de style RESTful (ROA)
Le code suivant montre comment utiliser CommonRequest pour appeler l'opération DescribeClustersV1 de Container Service for Kubernetes (ACK) :
<?php
namespace AlibabaCloud\SDK\Sample;
require_once 'vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class Sample
{
public static function main()
{
try {
$result = AlibabaCloud::roa()
->regionId('cn-hangzhou) // The region ID. If this parameter is not specified, the region of the client or the default region is used.
->product('CS') // The service name.
->version('2015-12-15 ') // The service version.
->serviceCode('cs') // The service code for addressing. This parameter is optional.
->endpointType('openAPI') // The endpoint type. This parameter is optional.
->method('GET') // The request method.
->host('cs.aliyun.com ') // The domain name. If this parameter is specified, addressing is not performed. If a service uses bearer tokens for authentication, you must specify the domain name.
->pathPattern('/api/v1/clusters') // The URL of the API operation. When you call an ROA-style API operation, you must configure pathPattern() to specify the complete URL of the API operation. You can obtain the URL of an API operation from the API metadata.
->request(); // Initiate the request and obtain the result. This parameter must be at the end of the settings.
print_r($result->toArray());
} catch (ClientException $exception) {
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}
}
}
Sample::main();
FAQ
-
Que faire si le message d'erreur « Fatal error: Uncaught AlibabaCloud\Client\Exception\ClientException: AccessKey ID cannot be empty inXXX » s'affiche ?
Cause : la paire d'AccessKey est mal configurée.
Solutions :
-
Exécutez les commandes suivantes pour vérifier la configuration des variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Si une paire d'AccessKey valide s'affiche, les variables d'environnement sont correctement configurées. Sinon, configurez-les selon vos besoins. Pour plus d'informations, consultez Configurer les variables d'environnement sous Linux, macOS et Windows.
-
Vérifiez les erreurs liées à la paire d'AccessKey dans le code.
Exemple de requête incorrecte :
AlibabaCloud::accessKeyClient( getenv('yourAccessKeyID'), getenv('yourAccessKeySecret') )RemarqueDans l'exemple ci-dessus, les valeurs passées à getenv() servent directement de paire d'AccessKey. Or, cette fonction lit les valeurs depuis les variables d'environnement. Une fois les variables d'environnement nommées ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET définies sur votre machine, getenv peut en récupérer les valeurs.
Exemple de requête correcte :
AlibabaCloud::accessKeyClient( getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') )
-