Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Intégrer le SDK

Dernière mise à jour :Sep 22, 2026

Lorsque vous appelez des opérations OpenAPI, nous vous recommandons d'intégrer le SDK à votre projet. L'utilisation du SDK simplifie le développement, permet une intégration rapide des fonctionnalités et réduit les coûts de maintenance. L'intégration du SDK Alibaba Cloud se déroule en trois étapes : importer le SDK Alibaba Cloud, définir les identifiants d'accès et utiliser le SDK. Cette rubrique décrit en détail le processus d'intégration du SDK.

Prérequis

  • Go 1.10.x ou version ultérieure

Importer le SDK

  1. Connectez-vous au SDK Center et sélectionnez le produit dont vous souhaitez appeler l'API, par exemple Short Message Service (SMS).

  2. Sur la page Installation, puis pour All Languages, sélectionnez Go. Dans l'onglet Quick Start, vous pouvez obtenir la méthode d'installation du SDK pour Short Message Service (SMS).

    Commande pour installer la bibliothèque principale du SDK : go get github.com/alibabacloud-go/darabonba-openapi/v2/client. Commande pour installer le SDK Short Message Service (SMS) : go get github.com/alibabacloud-go/dysmsapi-20170525/v4. Dépôt des versions et du code source : https://github.com/alibabacloud-go/dysmsapi-20170525/.

Définir les identifiants d'accès

L'appel aux API OpenAPI d'Alibaba Cloud nécessite généralement la définition d'identifiants d'accès. Les types d'identifiants courants sont AccessKey (AK) et Security Token Service token (STS token). Pour éviter la divulgation des identifiants, une solution courante consiste à les stocker dans des variables d'environnement. Pour plus de solutions de sécurité, consultez la section Utiliser les identifiants d'accès en toute sécurité. Cette rubrique utilise les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET à titre d'exemple. Configurez-les comme suit.

Configurer sous Linux et macOS

Définir un AccessKey Alibaba Cloud dans des variables d'environnement sous Linux et macOS

Cette section utilise les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET à titre d'exemple. Vous pouvez remplacer les noms de variables selon vos besoins, par exemple OSS_ACCESS_KEY_ID et OSS_ACCESS_KEY_SECRET.

Configurez les variables d'environnement à l'aide de la commande export :

Important

Une variable d'environnement temporaire définie à l'aide de la commande export n'est valide que pour la session en cours. La variable est effacée à la fin de la session. Pour une conservation à long terme (LTR), ajoutez la commande export au fichier de configuration de démarrage de votre système d'exploitation.

  • Configurez l'ID AccessKey et appuyez sur Entrée.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configurez le secret AccessKey et appuyez sur Entrée.

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Vérifiez la configuration.

    Exécutez la commande echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si la commande renvoie l'ID AccessKey correct, la configuration a réussi.

Configurer sous Windows

Définir un AccessKey Alibaba Cloud dans des variables d'environnement sous Windows

Cette section utilise les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET à titre d'exemple. Vous pouvez remplacer les noms de variables selon vos besoins, par exemple OSS_ACCESS_KEY_ID et OSS_ACCESS_KEY_SECRET.

Utiliser l'interface graphique (GUI)

  • Procédure

    Les étapes suivantes décrivent comment définir des variables d'environnement à l'aide de l'interface graphique dans Windows 10.

    Sur votre bureau, cliquez avec le bouton droit sur This PC et choisissez Properties > Advanced system settings > Environment Variables > New sous System variables ou User variables. Ensuite, effectuez la configuration.

    Variable

    Valeur d'exemple

    AccessKey ID

    • Nom de la variable : ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valeur de la variable : yourAccessKeyID

    AccessKey secret

    • Nom de la variable : ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valeur de la variable : yourAccessKeySecret

  • Tester la configuration

    Cliquez sur Start (ou utilisez le raccourci clavier Win+R), cliquez sur Run, saisissez cmd, puis cliquez sur OK (ou appuyez sur Entrée) pour ouvrir l'invite de commandes. Exécutez les commandes echo %ALIBABA_CLOUD_ACCESS_KEY_ID% et echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Utiliser l'invite de commandes (CMD)

  • Procédure

    Ouvrez l'invite de commandes en tant qu'administrateur et exécutez les commandes suivantes pour ajouter de nouvelles variables d'environnement au système.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    Le paramètre /M indique une variable d'environnement système. Vous pouvez omettre ce paramètre lors de la définition d'une variable d'environnement utilisateur.

  • Tester la configuration

    Cliquez sur Start (ou utilisez le raccourci clavier Win+R), cliquez sur Run, saisissez cmd, puis cliquez sur OK (ou appuyez sur Entrée) pour ouvrir l'invite de commandes. Exécutez les commandes echo %ALIBABA_CLOUD_ACCESS_KEY_ID% et echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Utiliser Windows PowerShell

Dans PowerShell, vous pouvez définir de nouvelles variables d'environnement valides pour toutes les nouvelles sessions :

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

Pour définir des variables d'environnement pour tous les utilisateurs, vous devez disposer d'autorisations administratives :

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

Vous pouvez définir des variables d'environnement temporaires valides uniquement pour la session en cours :

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

Dans PowerShell, exécutez les commandes Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID et Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Important

Après avoir configuré les variables d'environnement, vous devrez peut-être redémarrer vos outils de développement, tels que les environnements de développement intégrés (IDE), ou les services pour que les nouveaux paramètres prennent effet.

Utiliser le SDK

Cette rubrique utilise l'API SendMessageToGlobe de Short Message Service (SMS) à titre d'exemple. Pour la référence de l'API SendMessageToGlobe, consultez SendMessageToGlobe.

1. Initialiser le client de requête

Dans le SDK V2.0, tous les appels OpenAPI sont initiés via un client de requête (Client) fourni par le SDK. Par conséquent, vous devez initialiser le client de requête avant d'appeler une opération OpenAPI. Le client de requête prend en charge plusieurs méthodes d'initialisation. Cet exemple utilise un AccessKey pour l'initialisation. Pour plus de méthodes d'initialisation, consultez la section Gérer les identifiants d'accès.

Important
  • Sécurité des threads : l'instance du client est thread-safe et peut être utilisée en toute sécurité dans un environnement multithread. Vous n'avez pas besoin de créer une instance distincte pour chaque thread.

  • Dans le développement réel, nous ne recommandons pas de créer fréquemment des objets client. Cela gaspille des ressources et dégrade les performances. Nous vous recommandons d'utiliser le modèle singleton pour encapsuler le client afin qu'un seul objet client soit initialisé pour les mêmes identifiants d'accès et Endpoint tout au long du cycle de vie de l'application.

import (
  "os"

  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient () (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

2. Créer une instance de structure Request

Lorsque vous appelez une opération OpenAPI pour transmettre des paramètres, utilisez la structure Request fournie par le SDK. Le format de nommage de la structure Request OpenAPI est <OpenAPI name>Request. Par exemple, l'objet de requête de l'API SendSms est SendSmsRequest. Pour plus d'informations sur les paramètres de requête, consultez la référence d'API correspondante. Pour la référence d'API utilisée dans cet exemple, consultez SendMessageToGlobe.

Remarque

Si l'opération OpenAPI ne prend pas en charge les paramètres de requête, vous n'avez pas besoin de créer un objet de requête. Par exemple, lorsque vous appelez DescribeCdnSubList, cette API ne prend pas en charge les paramètres de requête.

// Create request object and set required input parameters
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
  // Please replace with the actual recipient number.
  To: tea.String("<YOUR_VALUE>"),
  // Please replace with the actual SMS content.
  Message: tea.String("<YOUR_VALUE>"),
}

3. Envoyer la requête

Lorsque vous appelez une opération OpenAPI via le client de requête, utilisez (recommandé) la fonction <API name>WithOptions. Cette fonction prend deux paramètres : le premier est un pointeur vers la structure Request de l'API, et le second est un pointeur vers la structure des options d'exécution. Les options d'exécution configurent les comportements de requête, tels que les paramètres de délai d'attente et les configurations de proxy. Pour plus d'informations, consultez la section Configurations avancées.

Remarque

Si l'opération OpenAPI ne prend pas en charge les paramètres de requête, vous n'avez pas besoin de transmettre un objet de requête lors de l'envoi de la requête. Par exemple, lorsque vous appelez DescribeCdnSubList, cette API nécessite uniquement les options d'exécution.

// You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import.

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Create request object and set required input parameters
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Please replace with the actual recipient number.
    To: tea.String("<YOUR_VALUE>"),
    // Please replace with the actual SMS content.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // To run the code, copy it and print the API return value.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

4. Gérer les exceptions

Le SDK Go V2.0 classe les exceptions en deux types principaux : error et SDKError.

  • error : erreurs non liées à l'activité, telles que les erreurs de validation causées par des fichiers source du SDK modifiés ou les erreurs d'analyse.

  • SDKError : erreurs liées à l'activité.

Pour plus d'informations sur la gestion des exceptions, consultez la section Gérer les exceptions.

Important

Nous vous recommandons de prendre des mesures raisonnables pour gérer les exceptions, telles que la propagation appropriée des exceptions, la journalisation et la tentative de récupération, afin de garantir la robustesse et la stabilité de votre système.

Cliquez pour afficher l'exemple de code complet

SendMessageToGlobe Exemple d'appel à l'API

package main

import (
  "fmt"
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
  "os"
)

func CreateClient() (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Create request object and set required input parameters
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Please replace with the actual recipient number.
    To: tea.String("<YOUR_VALUE>"),
    // Please replace with the actual SMS content.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // To run the code, copy it and print the API return value.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}

Scénario spécial : Configurer l'API Advance pour les téléchargements de fichiers

Lorsque vous utilisez des produits cloud tels que Image Search et Visual Intelligence API pour traiter des images locales ou télécharger des images, les opérations OpenAPI fournies dans la documentation officielle ne prennent pas en charge le téléchargement direct de fichiers. Pour télécharger un fichier, vous pouvez utiliser l'API Advance fournie par le produit cloud, qui prend en charge le passage d'un objet de flux de fichier. Le mécanisme sous-jacent est le suivant : le produit cloud stocke temporairement le fichier téléchargé dans Alibaba Cloud OSS, la région de stockage par défaut étant cn-shanghai, et implémente la fonctionnalité associée en lisant le fichier temporaire depuis cet OSS. Cet exemple utilise l'API DetectBodyCount de Visual Intelligence API, et la procédure est la suivante.

Remarque

Les fichiers temporaires stockés dans Alibaba Cloud OSS sont supprimés périodiquement.

  1. Initialiser le client de requête

    Notez que vous devez définir à la fois RegionId et l'Endpoint du produit cloud. RegionId spécifie la région où le fichier temporaire est stocké dans OSS. Si RegionId n'est pas défini, des délais d'attente peuvent se produire lors de l'appel à l'opération OpenAPI, car le produit cloud et OSS peuvent se trouver dans des régions différentes.

    import (
      "os"
    
      openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
      "github.com/alibabacloud-go/tea/tea"
    )
    
    func CreateClient() (_result *facebody20191230.Client, _err error) {
      config := &openapi.Config{
        // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
        AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
      }
      // The endpoint and regionId must be set to the same region.
      config.RegionId = tea.String("cn-shanghai")
      config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
      _result, _err = facebody20191230.NewClient(config)
      return _result, _err
    }
  2. Créer une instance de structure AdvanceRequest

    Lorsque vous téléchargez un fichier local, vous devez utiliser la structure AdvanceRequest fournie par le SDK pour transmettre le flux de fichier. Le format de nommage de la structure AdvanceRequest est <OpenAPI name>AdvanceRequest. Pour le nom du paramètre qui transmet le flux de fichier, recherchez le paramètre dont le type est io.Reader dans la structure AdvanceRequest correspondante.

    // Replace with the file path.
    filePath := `<FILE_PATH>`
    // Open the file and create a stream.
    file, err := os.Open(filePath)
    if err != nil {
      return fmt.Errorf("Failed to open file: %v", err)
    }
    defer file.Close() // Close the file.
    // Create an AdvanceRequest struct instance.
    detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
      ImageURLObject: file,
    }
  3. Envoyer la requête

    Appelez la fonction <API name>Advance pour envoyer la requête. Le paramètre d'entrée est un pointeur vers la structure AdvanceRequest.

    // You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import.
    
    func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
      client, _err := CreateClient()
      if _err != nil {
        return nil, _err
      }
    
      // Replace with the file path.
      filePath := `<FILE_PATH>`
      // Open the file and create a stream.
      file, err := os.Open(filePath)
      if err != nil {
        return nil, fmt.Errorf("Failed to open file: %v", err)
      }
      defer file.Close() // Close the file.
      // Create a request object.
      detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
        ImageURLObject: file,
      }
      runtime := &util.RuntimeOptions{}
      // Send the request.
      response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)
    
      if _err != nil {
        return nil, _err
      }
      return response, nil
    }

Cliquez pour afficher l'exemple de code complet

package main

import (
  "fmt"
  "os"

  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (_result *facebody20191230.Client, _err error) {

  config := &openapi.Config{
    // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.RegionId = tea.String("cn-shanghai")
  config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
  _result, _err = facebody20191230.NewClient(config)
  return _result, _err
}

func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }

  // Replace with the file path.
  filePath := `<FILE_PATH>`
  // Open the file and create a stream.
  file, err := os.Open(filePath)
  if err != nil {
    return nil, fmt.Errorf("Failed to open file: %v", err)
  }
  defer file.Close() // Close the file.
  // Create a request object.
  detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
    ImageURLObject: file,
  }
  runtime := &util.RuntimeOptions{}
  // Send the request.
  response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)

  if _err != nil {
    return nil, _err
  }
  return response, nil
}
func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response)
}

FAQ

  1. Le message d'erreur « You are not authorized to perform this operation » est renvoyé lors de l'appel à une opération OpenAPI.

    Cause et solution

    Cause : l'utilisateur Resource Access Management (RAM) correspondant à votre AccessKey ne dispose pas des autorisations requises pour appeler l'API.

    Solution : accordez les autorisations OpenAPI requises à l'utilisateur RAM. Pour savoir comment accorder des autorisations à un utilisateur RAM, consultez la section Gérer les autorisations des utilisateurs RAM.

    Par exemple, si l'erreur « You are not authorized to perform this operation » se produit lors de l'appel à l'API SendMessageToGlobe, vous pouvez créer une politique d'accès personnalisée et l'accorder à l'utilisateur RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. Le message d'erreur « SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host » est renvoyé lors de l'appel à une opération OpenAPI.

    Cause et solution

    Cause : l'Endpoint que vous avez spécifié lors de l'initialisation du client n'est pas pris en charge par l'opération OpenAPI que vous appelez.

    Solution : consultez la section Configurer les endpoints. Modifiez l'Endpoint et appelez à nouveau l'opération OpenAPI.

  3. Le message d'erreur « SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found. » est renvoyé lors de l'appel à une opération OpenAPI.

    Cause et solution

    Cause : votre AccessKey n'a pas été transmis correctement.

    Solution : vérifiez si l'AccessKey est transmis correctement lors de l'initialisation du client de requête. Notez que os.Getenv("XXX") récupère la valeur de XXX à partir des variables d'environnement.

Pour des solutions à davantage d'erreurs survenant lors de l'utilisation du SDK, consultez la section FAQ.