Le SDK Alibaba Cloud V1.0 pour Java prend en charge les appels d'API génériques. Cette rubrique explique comment effectuer des appels génériques à l'aide du SDK Alibaba Cloud V1.0 pour Java.
Caractéristiques
Légèreté : installez uniquement
aliyun-java-sdk-corepour appeler toutes les OpenAPI, sans installer les SDK individuels de chaque produit.Itération rapide et compatibilité : si un service cloud ne propose pas de SDK ou si celui-ci n'est pas mis à jour pour les dernières opérations d'API, utilisez les appels génériques. Vous pouvez ainsi appeler les dernières opérations d'API sans attendre les mises à jour du SDK.
Pour plus d'informations, consultez la rubrique Appels génériques et appels spécialisés.
Remarques
Avant d'effectuer un appel générique, obtenez et spécifiez manuellement les métadonnées requises, notamment la version de l'API, l'URL de la requête et le type de paramètre. Pour plus d'informations, consultez la rubrique Métadonnées de l'API.
Installer le SDK Core
Ajoutez la dépendance suivante au fichier pom.xml pour installer la bibliothèque principale du SDK Alibaba Cloud V1.0 pour Java.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
// Select a version.
<version>[(4.0.0,5.0.0)]</version>
</dependency>
Appeler une opération d'API
Initialiser un client de requête
Dans le package com.aliyuncs, créez un module client pour initialiser le client de requête, puis utilisez ce client pour appeler les opérations d'API. Dans cet exemple, une paire AccessKey est utilisée pour initialiser le client de requête. Pour plus d'informations, consultez la rubrique Gérer les identifiants d'accès.
Pour éviter toute fuite de clés AccessKey, enregistrez la paire AccessKey dans des variables d'environnement. Pour plus d'informations, consultez la rubrique Configurer les variables d'environnement sous Linux, macOS et Windows.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
// 1. Create and initialize a DefaultAcsClient instance.
DefaultProfile profile = DefaultProfile.getProfile(
// Your region ID.
"cn-hangzhou",
// System.getenv indicates that the AccessKey ID of the Resource Access Management (RAM) user is obtained from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// System.getenv indicates that the AccessKey secret of the RAM user is obtained from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Optional. Configure HTTPS for the client.
HttpClientConfig clientConfig = HttpClientConfig.getDefault();
// // Do not verify the server-side certificate.
// clientConfig.setIgnoreSSLCerts(true);
// // The maximum number of connections for each host.
// clientConfig.setMaxRequestsPerHost(6);
// // The connection timeout.
// clientConfig.setConnectionTimeoutMillis(30000L);
// // The read timeout.
// clientConfig.setReadTimeoutMillis(30000L);
// // The write timeout.
// clientConfig.setWriteTimeoutMillis(60000L);
// // Set an HTTP proxy.
// clientConfig.setHttpProxy("http://127.0.0.1:9898");
// // Set an HTTPS proxy.
// clientConfig.setHttpsProxy("http://user:password@127.0.0.1:8989");
// // Set a list of addresses to ignore for the proxy.
// clientConfig.setNoProxy("127.0.0.1,localhost");
profile.setHttpClientConfig(clientConfig);
IAcsClient client = new DefaultAcsClient(profile);
Configurer les informations de base et les paramètres de requête de l'opération d'API
Utilisez CommonRequest pour configurer les paramètres de requête communs et les paramètres spécifiques à l'opération pour l'opération d'API. Pour plus d'informations sur les paramètres de requête communs, consultez la rubrique Paramètres avancés.
Le module CommonRequest convertit les métadonnées de l'API, telles que le numéro de version, l'URL et le type de paramètre, en une requête HTTP valide via un processus de configuration de requête standard, puis renvoie les données de réponse brutes. La manière dont les paramètres sont transmis dépend du style et de la conception de l'API.
Paramètres de requête de l'API
La méthode de transmission d'un paramètre de requête est déterminée par les métadonnées de l'opération d'API. Par exemple, l'opération d'API DescribeInstanceStatus est définie comme {"name":"RegionId","in":"query",...}} dans les métadonnées. Dans ce cas, "in":"query" indique que l'ID de région (RegionId) doit être transmis via putQueryParameter.
Description | Méthode de transmission du paramètre |
S'applique lorsque le paramètre de requête est défini sur | putQueryParameter(String key,String value) Remarque Si un paramètre de requête est une collection, spécifiez le paramètre comme suit : putQueryParameter("key.1","value1"); Transmettez les paramètres en utilisant le format putQueryParameter("key.2","value2");... |
S'applique lorsque le paramètre de requête est | putBodyParameter(String key,String value) Remarque Si le paramètre de requête n'est pas une chaîne, convertissez la valeur du paramètre en une chaîne JSON et spécifiez cette chaîne comme valeur de variable. Exemple : request.putBodyParameter("key",new Gson().toJson(value)); |
Téléchargement de fichiers | setHttpContent(byte[] content,String charset,FormatType formatType) Remarque Définissez formatType sur FormatType.RAW. |
// 2. Create an API request and configure the request parameters.
// This example shows how to create a request to call the DescribeInstanceStatus operation, which is used to obtain the status of an Elastic Compute Service (ECS).
CommonRequest request = new CommonRequest();
// 2.1 Configure the common request parameters.
request.setSysMethod(com.aliyuncs.http.MethodType.POST);
request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com");// The domain name of the API operation.
request.setSysVersion("2014-05-26");// The API version.
request.setSysAction("DescribeInstanceStatus"); // The name of the API operation. When you call an RPC-style API operation, you must configure SysAction() to specify the name of the API operation.
request.setSysConnectTimeout(30000); // The timeout period.
request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
// request.setSysUriPattern("/"); // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS. Do not configure this parameter for RPC-style API operations.
// 2.2 Configure operation-specific request parameters.
// Scenario 1: Specify the query parameters in putQueryParameter(string key,string value).
request.putQueryParameter("RegionId", "cn-hangzhou");
List<String> instanceIds = List.of(
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
);
for(int i = 0; i < instanceIds.size(); ++i) {
request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
}
request.putQueryParameter("PageNumber", "1");
request.putQueryParameter("PageSize", "30");
// Scenario 2: Specify the body parameters in putBodyParameter(string key,string value).
// request.putBodyParameter("key1", "value1");
// request.putBodyParameter("key2", "value2");
// request.putBodyParameter("key3", "value3");
// Scenario 3: To upload files, specify setHttpContent(byte[] content,String charset,FormatType formatType). Set formatType to FormatType.RAW.
// byte[] bodyImg = Files.readAllBytes(Paths.get("<FILE_PATH>")); // Replace <FILE_PATH> with the actual file path.
// request.setHttpContent(bodyImg, "UTF-8", FormatType.RAW);
Envoyer une requête
Utilisez le client pour appeler la méthode getCommonResponse.
// Send the request.
CommonResponse response = client.getCommonResponse(request);
// The return value, response.getData(), is JSON-formatted data that contains the RequestId and the OpenAPI return parameters.
System.out.println(response.getData());
Exemple de code
Exemple : Appeler une opération d'API de style RPC
Dans cet exemple, l'opération DescribeInstanceStatus d'ECS est appelée à l'aide de CommonRequest.
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.GsonBuilder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class Sample {
public static void main(String[] args) throws ClientException, UnsupportedEncodingException {
// Create and initialize a DefaultAcsClient instance.
DefaultProfile profile = DefaultProfile.getProfile(
// Your region ID.
"cn-hangzhou",
// Obtain the AccessKey ID of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Obtain the AccessKey secret of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
// Create an API request and set parameters.
CommonRequest request = new CommonRequest();
request.setSysMethod(com.aliyuncs.http.MethodType.POST); // The request method.
request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com"); // The domain name of the API operation.
request.setSysVersion("2014-05-26"); // The API version number.
request.setSysAction("DescribeInstanceStatus"); // The name of the API operation. When you call an RPC-style API operation, you must configure SysAction() to specify the operation name.
request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // The request protocol. Valid values: HTTPS and HTTP. We recommend that you use HTTPS.
request.putQueryParameter("RegionId", "cn-hangzhou");
List<String> instanceIds = List.of(
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
);
for(int i = 0; i < instanceIds.size(); ++i) {
request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
}
request.putQueryParameter("PageNumber", "1");
request.putQueryParameter("PageSize", "30");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Exemple : Appeler une opération d'API RESTful
Dans cet exemple, l'opération DescribeClustersV1 de Container Service for Kubernetes (ACK) est appelée à l'aide de CommonRequest.
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
public static void main(String[] args) {
// Create and initialize a DefaultAcsClient instance.
DefaultProfile profile = DefaultProfile.getProfile(
// Your region ID.
"cn-hangzhou",
// Obtain the AccessKey ID of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Obtain the AccessKey secret of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
// Create an API request and set parameters.
CommonRequest request = new CommonRequest();
request.setSysDomain("cs.aliyuncs.com");// The domain name.
request.setSysVersion("2015-12-15");// The API version.
request.setSysUriPattern("/clusters"); // The URI of the API resource. When you call a ROA-style API operation, you must configure UriPattern() to specify the complete resource path. Obtain the resource path from data.path in the OpenAPI metadata.
request.setSysMethod(MethodType.GET);// The request method.
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
FAQ
-
Le message d'erreur indique que le paramètre obligatoire « AccessKeyId » est manquant.
Cause : la paire AccessKey n'est pas correctement configurée.
Solutions :
-
Exécutez les commandes suivantes pour vérifier si les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sont configurées.
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 AccessKey valide est renvoyée, les variables d'environnement sont correctement configurées. Si aucune paire AccessKey ou une paire invalide n'est renvoyée, configurez les variables d'environnement comme requis. Pour plus d'informations, consultez la rubrique Configurer les variables d'environnement sous Linux, macOS et Windows.
-
Vérifiez les erreurs liées à la paire AccessKey dans le code.
Exemples d'erreurs courantes :
accessKeyId = System.getenv("yourAccessKeyID"), accessKeySecret = System.getenv("yourAccessKeySecret")RemarqueDans l'exemple de requête erronée ci-dessus, les valeurs d'entrée de System.getenv() sont utilisées comme paire AccessKey. Or, cette fonction sert à lire les valeurs des variables d'environnement. Après avoir spécifié les noms des variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sur votre machine, System.getenv peut lire les valeurs correspondantes.
Exemple correct
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
-
-
La requête échoue avec le message d'erreur suivant : « com.aliyuncs.exceptions.ClientException: MissingParameter : The input parameter "Timestamp" that is mandatory for processing this request is not supplied. »
Cause : le paramètre
SysUriPatternest configuré dans les paramètres de requête communs de l'opération d'API de style RPC.Solution : supprimez le paramètre
SysUriPatterndes paramètres de requête communs.