Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Integre o SDK

Última atualização: Sep 22, 2026

Ao chamar operações da openapi, recomendamos a integração do SDK ao seu projeto. O uso do SDK simplifica o desenvolvimento, permite a integração rápida de recursos e reduz os custos de manutenção. A integração do Alibaba Cloud SDK envolve três etapas: importar o Alibaba Cloud SDK, definir as credenciais de acesso e usar o SDK. Este tópico descreve detalhadamente o processo de integração do SDK.

Pré-requisitos

  • Go 1.10.x ou superior

Importe o SDK

  1. Acesse o SDK Center e selecione o product cuja API deseja chamar, como o Short Message Service (SMS).

  2. Na página Installation e, em All Languages, selecione Go. Na aba Quick Start, obtenha o método de instalação do SDK para o Short Message Service (SMS).

    Para o SDK, instale a biblioteca principal com o comando: go get github.com/alibabacloud-go/darabonba-openapi/v2/client. Para o Short Message Service (SMS), instale o SDK com o comando: go get github.com/alibabacloud-go/dysmsapi-20170525/v4. Repositório de releases e código-fonte: https://github.com/alibabacloud-go/dysmsapi-20170525/.

Defina as credenciais de acesso

Chamar a openapi do Alibaba Cloud geralmente exige definir credenciais de acesso. Os tipos comuns de credenciais são AccessKey (AK) e Security Token Service token (STS token). Para evitar vazamentos de credenciais, uma solução comum é armazená-las em variáveis de ambiente. Para outras soluções de segurança, consulte Securely use access credentials. Este tópico usa as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como exemplo. Por favor, configure as credenciais da seguinte forma.

Configure no Linux e macOS

Defina um AccessKey do Alibaba Cloud em variáveis de ambiente no Linux e macOS

Esta seção usa as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como exemplos. Substitua os nomes das variáveis conforme necessário, por exemplo, OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.

Configure as variáveis de ambiente usando o comando export:

Importante

Uma variável de ambiente temporária definida com o comando export é válida apenas para a sessão atual. A variável é apagada ao término da sessão. Para retenção de longo prazo (LTR), adicione o comando export ao arquivo de configuração de inicialização do seu sistema operacional.

  • Configure o AccessKey ID e pressione Enter.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configure o AccessKey secret e pressione Enter.

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Verifique a configuração.

    Execute o comando echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o comando retornar o AccessKey ID correto, a configuração estará correta.

Configure no Windows

Defina um AccessKey do Alibaba Cloud em variáveis de ambiente no Windows

Esta seção usa as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como exemplos. Substitua os nomes das variáveis conforme necessário, por exemplo, OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.

Use a interface gráfica do usuário (GUI)

  • Procedimento

    As etapas a seguir descrevem como definir variáveis de ambiente pela GUI no Windows 10.

    Na sua área de trabalho, clique com o botão direito em This PC e escolha Properties > Advanced system settings > Environment Variables > New em System variables ou User variables. Em seguida, conclua a configuração.

    Variável

    Valor de exemplo

    AccessKey ID

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valor da variável: yourAccessKeyID

    AccessKey secret

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valor da variável: yourAccessKeySecret

  • Teste a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração estará correta.

Use o prompt de comando (CMD)

  • Procedimento

    Abra o prompt de comando como administrador e execute os seguintes comandos para adicionar novas variáveis de ambiente ao sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    O parâmetro /M indica uma variável de ambiente do sistema. Omita esse parâmetro ao definir uma variável de ambiente de usuário.

  • Teste a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração estará correta.

Use o Windows PowerShell

No PowerShell, defina novas variáveis de ambiente válidas para todas as novas sessões:

[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 definir variáveis de ambiente para todos os usuários, são necessárias permissões administrativas:

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

Defina variáveis de ambiente temporárias válidas apenas para a sessão atual:

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

No PowerShell, execute os comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID e Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Se os comandos retornarem o AccessKey correto, a configuração estará correta.

Importante

Após configurar as variáveis de ambiente, reinicie as ferramentas de desenvolvimento, como ambientes de desenvolvimento integrado (IDEs) ou serviços, para que as novas configurações tenham efeito.

Use o SDK

Este tópico usa a API SendMessageToGlobe do Short Message Service (SMS) como exemplo. Para a referência da API SendMessageToGlobe, consulte SendMessageToGlobe.

1. Inicialize o client de requisição

No SDK V2.0, todas as chamadas da openapi são iniciadas por meio de um client de requisição (Client) fornecido pelo SDK. Portanto, inicialize o client de requisição antes de chamar uma operação da openapi. O client de requisição oferece suporte a vários métodos de inicialização. Este exemplo usa um AccessKey para a inicialização. Para mais métodos de inicialização e para que você gerencie as credenciais, consulte Manage access credentials.

Importante
  • Segurança de threads: A instância do client é thread-safe e pode ser usada com segurança em um ambiente multithread. Não crie uma instância separada para cada thread.

  • No desenvolvimento real, não recomendamos criar objetos client com frequência. Isso desperdiça recursos e degrada o desempenho. Recomendamos usar o padrão singleton para encapsular o client, de modo que apenas um objeto client seja inicializado para as mesmas credenciais de acesso e Endpoint durante todo o ciclo de vida da aplicação.

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. Crie uma instância da struct de requisição

Ao chamar uma operação da openapi para passar parâmetros, use a struct Request fornecida pelo SDK. O formato de nomenclatura da struct Request da openapi é <OpenAPI name>Request. Por exemplo, o objeto de requisição da API SendSms é SendSmsRequest. Para mais informações sobre os parâmetros de requisição, consulte a referência da API correspondente. Para a referência da API usada neste exemplo, consulte SendMessageToGlobe.

Nota

Se a operação da openapi não oferecer suporte a parâmetros de requisição, não crie um objeto de requisição. Por exemplo, ao chamar DescribeCdnSubList, esta API não aceita parâmetros de requisição.

// 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. Envie a requisição

Ao chamar uma operação da openapi por meio do client de requisição, use a função <API name>WithOptions (Recomendado). Esta função aceita dois parâmetros: o primeiro é um ponteiro para a struct Request da API, e o segundo é um ponteiro para a struct de opções de runtime. As opções de runtime configuram o comportamento da requisição, como tempo limite e configurações de proxy. Para mais informações, consulte Advanced configurations.

Nota

Se a operação da openapi não oferecer suporte a parâmetros de requisição, não é necessário passar um objeto de requisição ao enviá-la. Por exemplo, ao chamar DescribeCdnSubList, esta API requer apenas as opções de runtime.

// 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. Trate as exceções

O SDK Go V2.0 classifica as exceções em dois tipos principais: error e SDKError.

  • error: Erros não relacionados a negócios, como erros de validação causados por arquivos source do SDK modificados ou erros de parsing.

  • SDKError: Erros relacionados a negócios.

Para mais informações sobre o tratamento de exceções, consulte Handle exceptions.

Importante

Adote medidas adequadas para tratar exceções, como propagá-las corretamente, registrar logs e tentar a recuperação, a fim de garantir a robustez e a estabilidade do sistema.

Clique e visualize o exemplo de código completo

Exemplo de chamada da 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)
}

Cenário especial: Configure a API Advance para upload de arquivos

Ao usar cloud products como Image Search e Visual Intelligence API para processar imagens locais ou fazer upload de imagens, as operações da openapi fornecidas na documentação oficial não oferecem suporte ao upload direto de arquivos. Para fazer o upload de um arquivo, use a API Advance fornecida pelo cloud product, que aceita um objeto de fluxo de arquivo. O mecanismo subjacente é o seguinte: o cloud product armazena temporariamente o arquivo enviado no Alibaba Cloud OSS (a região de armazenamento padrão é cn-shanghai) e implementa o recurso relacionado lendo o arquivo temporário desse OSS. Este exemplo usa a API DetectBodyCount do Visual Intelligence API. O procedimento é descrito a seguir.

Nota

Os arquivos temporários armazenados no Alibaba Cloud OSS são excluídos periodicamente.

  1. Inicialize o client de requisição

    Defina tanto o RegionId quanto o Endpoint do cloud product. O RegionId especifica a região onde o arquivo temporário é armazenado no OSS. Se o RegionId não for definido, podem ocorrer tempos limite ao chamar a operação da openapi, pois o cloud product e o OSS podem estar em regiões diferentes.

    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. Crie uma instância da struct AdvanceRequest

    Ao fazer o upload de um arquivo local, use a struct AdvanceRequest fornecida pelo SDK para passar o fluxo do arquivo. O formato de nomenclatura da struct AdvanceRequest é <OpenAPI name>AdvanceRequest. Para identificar o parâmetro que recebe o fluxo do arquivo, busque o parâmetro do tipo io.Reader na struct AdvanceRequest correspondente.

    // 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. Envie a requisição

    Chame a função <API name>Advance para enviar a requisição. O parâmetro de entrada é um ponteiro para a struct 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
    }

Clique e visualize o exemplo 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)
}

FAQ

  1. A mensagem de erro "You are not authorized to perform this operation" é exibida ao chamar uma operação da openapi.

    Causa e solução

    Causa: O usuário do Resource Access Management (RAM) correspondente ao seu AccessKey não tem as permissões necessárias para chamar a API.

    Solução: Conceda as permissões necessárias da openapi ao usuário do RAM. Para obter informações sobre como conceder permissões a um usuário do RAM, consulte Manage RAM user permissions.

    Por exemplo, se o erro "You are not authorized to perform this operation" ocorrer ao chamar a API SendMessageToGlobe, crie uma política de acesso personalizada e conceda-a ao usuário do RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. A mensagem de erro "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" é exibida ao chamar uma operação da openapi.

    Causa e solução

    Causa: O Endpoint especificado durante a inicialização do client não é compatível com a operação da openapi chamada.

    Solução: Consulte Configure endpoints. Modifique o Endpoint e chame a operação da openapi novamente.

  3. A mensagem de erro "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found." é exibida ao chamar uma operação da openapi.

    Causa e solução

    Causa: O AccessKey não foi passado corretamente.

    Solução: Verifique se o AccessKey foi passado corretamente ao inicializar o client de requisição. Note que os.Getenv("XXX") recupera o valor de XXX das variáveis de ambiente.

Para obter soluções para outros erros ao usar o SDK, consulte FAQ.