Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Integración del SDK

Última actualización: Sep 22, 2026

Cuando llame a operaciones de OpenAPI, se recomienda integrar el SDK en su proyecto. El uso del SDK simplifica el desarrollo, permite incorporar funciones rápidamente y reduce los costos de mantenimiento. La integración de Alibaba Cloud SDK consta de tres pasos: importar Alibaba Cloud SDK, establecer las credenciales de acceso y usar el SDK. En este tema se describe el proceso de integración del SDK en detalle.

Requisitos previos

  • Go 1.10.x o posterior

Importación del SDK

  1. Inicie sesión en SDK Center y seleccione el producto cuya API desea llamar, por ejemplo, Short Message Service (SMS).

  2. En la página Installation. Luego, en All Languages, seleccione Go. En la pestaña Quick Start encontrará el método de instalación del SDK para Short Message Service (SMS).

    Comando para instalar la biblioteca principal del SDK: go get github.com/alibabacloud-go/darabonba-openapi/v2/client. Comando para instalar el SDK de Short Message Service (SMS): go get github.com/alibabacloud-go/dysmsapi-20170525/v4. Repositorio de código fuente y de la versión: https://github.com/alibabacloud-go/dysmsapi-20170525/.

Configuración de las credenciales de acceso

Para llamar a las OpenAPI de Alibaba Cloud, generalmente es necesario configurar credenciales de acceso. Los tipos más comunes son AccessKey (AK) y Security Token Service token (STS token). Una práctica habitual para evitar filtraciones consiste en almacenarlas en variables de entorno. Para conocer otras soluciones de seguridad, consulte Securely use access credentials. Este tema toma como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Configúrelas de la siguiente manera.

Configuración en Linux y macOS

Configuración de una AccessKey de Alibaba Cloud en variables de entorno en Linux y macOS

Esta sección utiliza como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si lo requiere, sustituya estos nombres por otros, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.

Configure las variables de entorno mediante el comando export:

Importante

Una variable de entorno temporal establecida con el comando export solo es válida durante la sesión actual. Al finalizar la sesión, la variable se elimina. Para conservarla de forma permanente, agregue el comando export al archivo de configuración de inicio de su sistema operativo.

  • Configure el AccessKey ID y presione Entrar.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configure el secreto de AccessKey y presione Entrar.

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Compruebe la configuración.

    Ejecute el comando echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si el comando devuelve el AccessKey ID correcto, la configuración fue exitosa.

Configuración en Windows

Configuración de una AccessKey de Alibaba Cloud en variables de entorno en Windows

Esta sección utiliza como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si lo requiere, sustituya estos nombres por otros, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.

Uso de la interfaz gráfica de usuario (GUI)

  • Procedimiento

    A continuación se describen los pasos para configurar variables de entorno mediante la GUI en Windows 10.

    En el escritorio, haga clic con el botón derecho en This PC y elija Properties > Advanced system settings > Environment Variables > New, ya sea en System variables o en User variables. Después, complete la configuración.

    Variable

    Valor de ejemplo

    AccessKey ID

    • Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valor de la variable: yourAccessKeyID

    Secreto de AccessKey

    • Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valor de la variable: yourAccessKeySecret

  • Prueba de la configuración

    Haga clic en Start (o use el atajo de teclado Win+R), luego en Run, introduzca cmd y haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si devuelven la AccessKey correcta, la configuración fue exitosa.

Uso del símbolo del sistema (CMD)

  • Procedimiento

    Abra el símbolo del sistema como administrador y ejecute los siguientes comandos para agregar nuevas variables de entorno al sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    El parámetro /M indica que se trata de una variable de entorno del sistema. Puede omitirlo cuando configure una variable de entorno de usuario.

  • Prueba de la configuración

    Haga clic en Start (o use el atajo de teclado Win+R), luego en Run, introduzca cmd y haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si devuelven la AccessKey correcta, la configuración fue exitosa.

Uso de Windows PowerShell

En PowerShell puede establecer nuevas variables de entorno válidas para todas las sesiones nuevas:

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

Para establecer variables de entorno aplicables a todos los usuarios, necesita permisos de administrador:

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

También puede definir variables de entorno temporales, válidas únicamente durante la sesión actual:

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

En PowerShell, ejecute los comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID y Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si devuelven la AccessKey correcta, la configuración fue exitosa.

Importante

Después de configurar las variables de entorno, es posible que deba reiniciar sus herramientas de desarrollo, como los entornos de desarrollo integrados (IDE), o los servicios para que los nuevos ajustes surtan efecto.

Uso del SDK

Este tema utiliza como ejemplo la API SendMessageToGlobe de Short Message Service (SMS). Para consultar la referencia de la API SendMessageToGlobe, consulte SendMessageToGlobe.

1. Inicialización del cliente de solicitud

En el SDK V2.0, todas las llamadas a OpenAPI se inician a través de un cliente de solicitud (Client) proporcionado por el SDK. Por lo tanto, debe inicializarlo antes de llamar a cualquier operación de OpenAPI. El cliente admite varios métodos de inicialización. Este ejemplo utiliza una AccessKey. Para conocer otros métodos, consulte Manage access credentials.

Importante
  • Seguridad de hilos: la instancia del cliente es segura para hilos y se puede utilizar sin problemas en un entorno multihilo. No es necesario crear una instancia independiente para cada hilo.

  • En el desarrollo real, no se recomienda crear objetos de cliente con frecuencia, ya que esto desperdicia recursos y degrada el rendimiento. Se recomienda aplicar el patrón singleton para encapsular el cliente. De esta forma, solo se inicializa un objeto de cliente para las mismas credenciales de acceso y endpoint durante todo el ciclo de vida de la aplicación.

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. Creación de una instancia de estructura de solicitud

Al llamar a una operación de OpenAPI para pasar parámetros, utilice la estructura Request que proporciona el SDK. El formato de nombre de la estructura Request de OpenAPI es <OpenAPI name>Request. Por ejemplo, el objeto de solicitud de la API SendSms es SendSmsRequest. Para obtener más información sobre los parámetros de solicitud, consulte la referencia de la API correspondiente. La referencia utilizada en este ejemplo se encuentra en SendMessageToGlobe.

Nota

Si la operación de OpenAPI no admite parámetros de solicitud, no es necesario crear un objeto de solicitud. Por ejemplo, al llamar a DescribeCdnSubList, dicha API no acepta parámetros de solicitud.

// 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. Envío de la solicitud

Cuando llame a una operación de OpenAPI mediante el cliente de solicitud, se recomienda usar la función <API name>WithOptions. Esta función recibe dos parámetros: el primero es un puntero a la estructura Request de la API y el segundo es un puntero a la estructura de opciones de ejecución. Las opciones de ejecución definen el comportamiento de la solicitud, como los tiempos de espera y las configuraciones de proxy. Para obtener más información, consulte Advanced configurations.

Nota

Si la operación de OpenAPI no admite parámetros de solicitud, no es necesario pasar un objeto de solicitud al enviarla. Por ejemplo, al llamar a DescribeCdnSubList, esta API solo requiere las opciones de ejecución.

// 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. Manejo de excepciones

El SDK V2.0 de Go clasifica las excepciones en dos tipos principales: error y SDKError.

  • error: errores ajenos a la lógica de negocio, como fallos de validación provocados por modificaciones en los archivos de origen del SDK o errores de análisis sintáctico.

  • SDKError: errores relacionados con la lógica de negocio.

Para obtener más información sobre el manejo de excepciones, consulte Handle exceptions.

Importante

Se recomienda adoptar medidas adecuadas para manejar las excepciones. Entre ellas destacan propagarlas correctamente, registrarlas en los registros e intentar la recuperación, con el fin de garantizar la solidez y estabilidad de su sistema.

Haga clic para ver el ejemplo de código completo

Ejemplo de llamada a la API SendMessageToGlobe

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)
}

Escenario especial: configuración de la API Advance para cargar archivos

Cuando utiliza productos en la nube como Image Search y Visual Intelligence API para procesar imágenes locales o cargar imágenes, las operaciones de OpenAPI descritas en la documentación oficial no permiten cargar archivos directamente. Para cargar un archivo, utilice la API Advance del producto en la nube, la cual admite el paso de un objeto de flujo de archivo. El mecanismo subyacente funciona así: el producto almacena temporalmente el archivo cargado en Alibaba Cloud OSS, en la región de almacenamiento predeterminada cn-shanghai, e implementa la función correspondiente leyendo dicho archivo temporal desde ese servicio de OSS. Este ejemplo utiliza la API DetectBodyCount de Visual Intelligence API. A continuación se detalla el procedimiento.

Nota

Los archivos temporales almacenados en Alibaba Cloud OSS se eliminan periódicamente.

  1. Inicializar el cliente de solicitud

    Tenga en cuenta que debe configurar tanto RegionId como el Endpoint del producto en la nube. El parámetro RegionId especifica la región donde se almacenará el archivo temporal en OSS. Si no establece RegionId, podrían producirse tiempos de espera agotados al llamar a la operación de OpenAPI, dado que el producto en la nube y OSS podrían encontrarse en regiones distintas.

    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. Crear una instancia de la estructura AdvanceRequest

    Al cargar un archivo local, debe utilizar la estructura AdvanceRequest proporcionada por el SDK para pasar el flujo del archivo. El formato de nombre de esta estructura es <OpenAPI name>AdvanceRequest. Para identificar el nombre del parámetro que recibe el flujo, busque aquel cuyo tipo sea io.Reader dentro de la estructura AdvanceRequest correspondiente.

    // 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. Enviar la solicitud

    Llame a la función <API name>Advance para enviar la solicitud. El parámetro de entrada es un puntero a la estructura 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
    }

Haga clic para ver el ejemplo de código completo

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)
}

Preguntas frecuentes

  1. Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "You are not authorized to perform this operation".

    Causa y solución

    Causa: el usuario de Resource Access Management (RAM) asociado a su AccessKey no cuenta con los permisos necesarios para llamar a la API.

    Solución: otorgue al usuario de RAM los permisos de OpenAPI requeridos. Para saber cómo conceder permisos a un usuario de RAM, consulte Manage RAM user permissions.

    Por ejemplo, si aparece el error "You are not authorized to perform this operation" al llamar a la API SendMessageToGlobe, cree una política de acceso personalizada y asígnela al usuario de RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host".

    Causa y solución

    Causa: el endpoint especificado durante la inicialización del cliente no es compatible con la operación de OpenAPI que intenta llamar.

    Solución: consulte Configure endpoints. Modifique el endpoint y vuelva a llamar a la operación de OpenAPI.

  3. Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found.".

    Causa y solución

    Causa: su AccessKey no se pasó correctamente.

    Solución: compruebe si la AccessKey se transmite de forma adecuada al inicializar el cliente de solicitud. Tenga en cuenta que os.Getenv("XXX") recupera el valor de XXX desde las variables de entorno.

Para conocer las soluciones a otros errores que pueden presentarse al usar el SDK, consulte FAQ.