Le SDK Alibaba Cloud V1.0 pour Go prend en charge les appels d'API génériques, qui vous permettent d'appeler n'importe quelle opération d'API sans installer le SDK de chaque service.
Caractéristiques
Légèreté : installez uniquement la bibliothèque centrale pour appeler toutes les opérations d'API, sans avoir à installer le SDK de chaque service.
Itération rapide et compatibilité : si un service cloud ne propose pas encore de SDK ou si le SDK n'a pas été mis à jour pour les dernières opérations d'API, effectuez des appels génériques pour accéder aux 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 la bibliothèque centrale du SDK Alibaba Cloud V1.0 pour Go
Exécutez la commande suivante pour installer la bibliothèque centrale du SDK Alibaba Cloud V1.0 pour Go :
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
Appeler une opération d'API
Initialiser un client de requête
Créez un objet client dans le package aliyunsdkcore pour initialiser le client de requête. Dans cet exemple, une paire AccessKey est utilisée pour l'authentification. Pour plus d'informations, consultez la rubrique Gérer les identifiants d'accès.
Pour éviter toute fuite de clés AccessKey, stockez votre paire AccessKey dans des variables d'environnement. Pour plus d'informations, consultez la rubrique Configurer des variables d'environnement sous Linux, macOS et Windows.
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)
// Use an AccessKey pair to directly initialize the request client. os.Getenv indicates that the AccessKey ID and AccessKey secret are obtained from environment variables.
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
Configurer les informations de l'opération d'API et les paramètres de requête
Utilisez CommonRequest pour configurer les paramètres de requête communs et les paramètres spécifiques à l'opération d'API. Pour plus d'informations sur les paramètres de requête communs, consultez la rubrique Paramètres avancés.
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, et 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 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. Dans ce cas, "in":"query" indique que l'ID de région (RegionId) doit être transmis dans QueryParams["key"] = "value".
|
Scénario |
Méthode de transmission du paramètre |
|
|
QueryParams["key"] = "value" Remarque
Pour spécifier un ensemble de paires clé-valeur, utilisez le format suivant : QueryParams["key.1"] = "value1", QueryParams["key.2"] = "value2",... |
|
|
FormParams["key"] = "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 avant de la transmettre. |
// 2. Create a CommonRequest object and configure the basic information about and request parameters of the API operation.
request := requests.NewCommonRequest()
// 2.1 Configure the basic information about the API operation
request.Domain = "ecs-cn-hangzhou.aliyuncs.com" // The endpoint of the API.
request.Version = "2014-05-26" // The version number of the API.
request.ApiName = "DescribeInstanceStatus" // The name of the API operation. When you call an RPC-style API operation, you must configure ApiName() to specify the name of the API operation.
request.Method = "POST" // The request method.
request.Scheme = "https" // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
// request.PathPattern = "/" // The resource path, which is required by ROA-style API operations. Do not configure this parameter for RPC-style API operations.
// 2.2 Configure the request parameters.
// Scenario 1: Configure the query parameters in the format of QueryParams["key"] = "value".
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
// Scenario 2: Configure the body parameters in the format of FormParams["key"] = "value".
// request.FormParams["key1"] = "value1"
// request.FormParams["key2"] = "value2"
// request.FormParams["key3"] = "value3"
Envoyer une requête
Appelez la fonction ProcessCommonRequest sur le client pour envoyer la requête.
// Initiate a request.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
// Parse the response content in the JSON format, including the request ID and the response parameters for the API operation.
fmt.Print(response.GetHttpContentString())
Exemple de code
Exemple : Appeler une opération d'API de style RPC
L'exemple suivant appelle l'opération DescribeRegions d'ECS pour illustrer un appel générique d'une opération d'API de style RPC.
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"
request.Version = "2014-05-26"
request.ApiName = "DescribeInstanceStatus"
request.Method = "POST"
request.Scheme = "HTTPS"
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
request.QueryParams["PageNumber"] = "1"
request.QueryParams["PageSize"] = "30"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
Exemple : Appeler une opération d'API de style RESTful (style ROA)
L'exemple suivant appelle l'opération DescribeClustersV1 de Container Service for Kubernetes (ACK) pour illustrer un appel générique d'une opération d'API de style RESTful (style ROA).
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "cs.aliyuncs.com" // The endpoint of the API operation.
request.Version = "2015-12-15" // The version number of the API operation.
// This is a RESTful API. Therefore, the PathPattern field must be specified.
request.PathPattern = "/api/v1/clusters" // The URL of the API operation. When you call an ROA-style API operation, you must configure set_uri_pattern() to specify a complete URL of the API operation. You can obtain the URL of an API operation from the API metadata.
request.Method = "GET" // The request method.
request.Scheme = "https" // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
FAQ
Que faire si le message d'erreur « SDK.ServerError MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied » s'affiche ?
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 AccessKey non valide n'est renvoyée, configurez les variables d'environnement selon vos besoins. Pour plus d'informations, consultez la rubrique Configurer des variables d'environnement sous Linux, macOS et Windows.
-
Vérifiez les erreurs liées à la paire AccessKey dans le code.
Exemple de requête erronée :
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("yourAccessKeyID"), os.Getenv("yourAccessKeySecret")) if err != nil { panic(err) }RemarqueDans l'exemple de requête erronée ci-dessus, les chaînes littérales transmises à os.Getenv() ne correspondent pas aux noms réels des variables d'environnement. Après avoir configuré les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sur votre machine, os.Getenv lit les valeurs correctes.
Exemple de requête réussie :
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) if err != nil { panic(err) }