Integre o Alibaba Cloud SDK ao seu projeto Go para chamar operações da OpenAPI. O processo envolve três etapas: importar o SDK, definir as credenciais de acesso e chamar a API.
Pré-requisitos
Go 1.10 ou posterior.
Importar o SDK
-
Faça logon no SDK Center e selecione o product correspondente à API que deseja chamar, como o Short Message Service (SMS).
-
Na página Installation e, em All Languages, escolha Go. Em seguida, na aba Quick Start, localize o método de instalação do SDK para o Short Message Service (SMS).
Definir credenciais de acesso
As chamadas à OpenAPI do Alibaba Cloud exigem credenciais de acesso, como um AccessKey ou um Security Token Service (STS) token. Armazene as credenciais em variáveis de ambiente para evitar vazamentos. As melhores práticas de segurança estão descritas em Securely use access credentials. O exemplo a seguir utiliza ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Configurar no Linux e macOS
Configurar variáveis de ambiente com o comando export
Uma variável de ambiente temporária definida com o comando export é válida apenas para a sessão atual. A variável é removida quando a sessão termina. 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 foi bem-sucedida.
Configurar no Windows
Usar a interface gráfica do usuário (GUI)
-
Procedimento
Os passos a seguir descrevem como definir variáveis de ambiente usando a GUI no Windows 10.
Na área de trabalho, clique com o botão direito em Este 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
-
Testar a configuração
Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira
cmde clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%eecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.
Usar o prompt de comando (CMD)
-
Procedimento
Abra o prompt de comando como administrador e execute os comandos a seguir para adicionar novas variáveis de ambiente ao sistema.
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /MO parâmetro
/Mindica uma variável de ambiente do sistema. Omita esse parâmetro ao definir uma variável de ambiente de usuário. -
Testar a configuração
Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira
cmde clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%eecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.
Usando 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 foi bem-sucedida.
Usar o SDK
O exemplo a seguir chama a API SendMessageToGlobe do Short Message Service (SMS). Referência da API SendMessageToGlobe: SendMessageToGlobe.
1. Inicializar o cliente de requisição
Todas as chamadas à OpenAPI com o SDK V2.0 passam por um cliente de requisição. Este exemplo inicializa o cliente com um AccessKey. Outros métodos de inicialização estão descritos em Manage access credentials.
A instância do cliente é thread-safe. Não é necessária uma instância separada por thread.
Evite criar objetos de cliente repetidamente — isso desperdiça recursos e degrada o desempenho. Utilize o padrão singleton para garantir um único cliente por par de credencial e endpoint durante todo o ciclo de vida da aplicação.
import (
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"
"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
}
2. Criar uma instância da struct Request
Passe os parâmetros da API por meio da struct Request do SDK, denominada <Nome da OpenAPI>Request (por exemplo, SendSmsRequest para a API SendSms). Detalhes dos parâmetros: SendMessageToGlobe.
APIs sem parâmetros de requisição (como DescribeCdnSubList) não exigem um objeto 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. Enviar a requisição
Chame uma OpenAPI usando a função <NomeDaAPI>WithOptions, que recebe um ponteiro para a struct Request da API e um ponteiro para a struct de opções de runtime. As opções de runtime controlam timeouts, proxies e outros comportamentos da requisição. Advanced configurations.
Para APIs sem parâmetros de requisição (como DescribeCdnSubList), passe 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. Tratar exceções
O SDK V2.0 para Go 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 modificações nos arquivos-fonte do SDK ou erros de parsing.
SDKError: Erros relacionados a negócios.
Orientações detalhadas sobre tratamento de exceções estão disponíveis em Handle exceptions.
Sempre trate exceções propagando-as, registrando-as em log ou recuperando-se delas para garantir a estabilidade do sistema.
Clique para visualizar o exemplo de código completo
Cenário especial: Configurar a API Advance para upload de arquivos
Alguns produtos cloud (como Image Search e Visual Intelligence API) exigem a API Advance para uploads de arquivos locais. Essa API aceita um stream de arquivo, armazena-o temporariamente no Alibaba Cloud OSS (região padrão: cn-shanghai) e o processa. Este exemplo utiliza a API DetectBodyCount do Visual Intelligence API.
Arquivos temporários armazenados no Alibaba Cloud OSS são excluídos periodicamente.
-
1. Inicializar o cliente de requisição
Defina tanto
RegionIdquantoEndpoint. ORegionIdespecifica a região do OSS para armazenamento temporário de arquivos. A omissão doRegionIdpode causar timeouts se o product e o OSS estiverem 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 } -
Criar uma instância da struct AdvanceRequest
Utilize a struct AdvanceRequest (denominada <NomeDaAPI>AdvanceRequest) para passar o stream do arquivo. O parâmetro de stream de arquivo possui o tipo
io.Reader.// 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, } -
Enviar uma requisição
Chame <NomeDaAPI>Advance com 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 }
Perguntas frequentes
-
A mensagem de erro "You are not authorized to perform this operation" é retornada ao chamar uma OpenAPI.
-
A mensagem de erro "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" é retornada ao chamar uma OpenAPI.
-
A mensagem de erro "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found." é retornada ao chamar uma OpenAPI.
Outros erros comuns do SDK e suas soluções: FAQ.