Ao chamar uma operação da OpenAPI, recomendamos integrar o 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 de um SDK do Alibaba Cloud envolve três etapas principais: importar o SDK do Alibaba Cloud, definir as credenciais de acesso e usar o SDK. Este tópico descreve o processo de integração do SDK em detalhes.
Requisitos de ambiente
Node.js >= 8.x
Importar o SDK
Faça login no SDK Center e selecione o product correspondente à API que deseja chamar, como o Short Message Service (SMS).
Na página Installation e configure All Languages como TypeScript. Em seguida, na aba Quick Start, localize as instruções de instalação do SDK para o Short Message Service (SMS).

Definir credenciais de acesso
Chamar operações da OpenAPI exige credenciais de acesso, como AccessKey ou Security Token Service (STS) token. Armazene as credenciais em variáveis de ambiente para evitar vazamentos. Para melhores práticas, consulte Securely use access credentials. Os exemplos abaixo usam as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Método de configuração no Linux e macOS
Os exemplos a seguir usam ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como nomes de variáveis. Substitua-os pelos seus próprios nomes, se necessário, como OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.
Execute os comandos export abaixo para definir as variáveis de ambiente:
As variáveis definidas com export são temporárias e válidas apenas para a sessão atual. Para persistência, adicione o comando export ao arquivo de inicialização do seu shell (como ~/.bashrc ou ~/.zshrc).
-
Defina o AccessKey ID:
# Replace yourAccessKeyID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID -
Defina o AccessKey secret:
# Replace yourAccessKeySecret with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret -
Verifique a configuração.
Execute
echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o valor retornado estiver correto, a configuração foi bem-sucedida.
Método de configuração no Windows
Usar 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 área de trabalho, clique 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
-
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 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 /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.
Usar 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 foi bem-sucedida.
Usar o SDK
Este tópico fornece um exemplo de chamada da operação da API ou SendMessageToGlobe do Short Message Service (SMS). Para obter a referência da API ou SendMessageToGlobe, consulte ou SendMessageToGlobe.
1. Inicializar o cliente de requisição
Todas as chamadas da OpenAPI passam por um cliente de requisição. Este exemplo inicializa um cliente com um par de AccessKey. Para outros métodos de inicialização, consulte Manage access credentials.
Objetos de cliente, como as instâncias Dysmsapi20180501 e , são seguros para threads e podem ser usados em ambientes multithread sem criar uma instância separada para cada thread.
Evite criar objetos de cliente repetidamente com
new. Use o padrão singleton para garantir apenas uma instância de cliente por credencial e endpoint durante todo o ciclo de vida da aplicação.
Exemplo em TypeScript
import Dysmsapi20180501, * as $Dysmsapi20180501 from '@alicloud/dysmsapi20180501';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
static createClient(): Dysmsapi20180501 {
let config = new $OpenApi.Config({
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// For more information about the endpoint, see https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501(config);
}
}
Exemplo em Node.js
const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');
class Client {
static createClient() {
let config = new OpenApi.Config({
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// For more information about the endpoint, see https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501.default(config);
}
}
2. Criar o objeto de requisição
Passe os parâmetros pelo objeto de requisição do SDK, denominado <Nome da OpenAPI>Request (por exemplo, SendSmsRequest). Para detalhes sobre os parâmetros, consulte a referência da API: SendMessageToGlobe.
Se uma API não tiver parâmetros de requisição, pule esta etapa. Por exemplo, DescribeCdnSubList não requer objeto de requisição.
Exemplo em TypeScript
// Create request object and set required input parameters
let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
// Please replace with the actual recipient number.
to: "<YOUR_VALUE>",
// Please replace with the actual SMS content.
message: "<YOUR_VALUE>",
});
Exemplo em Node.js
// Create request object and set required input parameters
let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
// Please replace with the actual recipient number.
to: '<YOUR_VALUE>',
// Please replace with the actual SMS content.
message: '<YOUR_VALUE>',
});
3. Enviar a requisição
Chame a função <operationName>WithOptions do cliente, onde <operationName> é o nome da API em camel case. Essa função recebe um objeto de requisição e parâmetros de runtime (timeout, proxy, etc.). Consulte Advanced configurations.
Se uma API não tiver parâmetros de requisição, passe apenas as opções de runtime. Por exemplo, DescribeCdnSubList requer apenas parâmetros de runtime.
Exemplo em TypeScript
// Create runtime parameters.
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
Exemplo em Node.js
// Create runtime parameters.
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
4. Tratar exceções
O SDK V2.0 para Node.js lança dois tipos de exceção:
UnretryableError: Lançada após o esgotamento do número máximo de tentativas, geralmente devido a problemas de rede. Recupere a última requisição via
err.data.lastRequest.ResponseError: Indica um erro no lado do servidor retornado pela API.
Consulte Exception handling.
Sempre trate as exceções — propague, registre ou recupere. Nunca as ignore silenciosamente.
Clique para visualizar o exemplo de código completo
Upload de arquivos com operações Advance
Algumas APIs (como busca de imagens e Visual Intelligence) não aceitam caminhos de arquivos locais diretamente. Use a operação Advance para fazer upload de arquivos via stream. O SDK armazena o arquivo temporariamente em um bucket do OSS na região cn-shanghai, e o service o lê a partir desse local. Este exemplo usa a operação DetectBodyCount da API Visual Intelligence.
Arquivos temporários armazenados no Alibaba Cloud OSS são limpos periodicamente.
-
Inicializar o cliente de requisição
Defina tanto
regionIdquantoendpointpara a mesma região. OregionIddetermina onde o arquivo temporário do OSS será armazenado. Se você omitir oregionId, uma incompatibilidade de região entre o product e o bucket do OSS causará timeouts.Exemplo em TypeScript
function createClient(): facebody20191230 { let config = new $OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // The endpoint and regionId must be for the same region. config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230(config); }Exemplo em Node.js
function createClient() { let config = new OpenApi.Config({ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // The endpoint and regionId must be for the same region. config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230.default(config); } -
Criar o objeto de requisição
Crie um objeto <NomeDaOpenAPI>AdvanceRequest para passar o stream do arquivo. O nome do parâmetro para o stream do arquivo é
ImageURLObject.Exemplo em TypeScript
// Read the file as a file stream. const filePath = '<FILE_PATH>'; // Replace this with the actual file path. // Check if the file exists. if (!fs.existsSync(filePath)) { console.error('File does not exist:', filePath); return; } // Create a stream and listen for stream errors. const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Stream error:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });Exemplo em Node.js
// Read the file as a file stream. const filePath = '<FILE_PATH>'; // Replace this with the actual file path. // Check if the file exists. if (!fs.existsSync(filePath)) { console.error('File does not exist:', filePath); return; } // Create a stream and listen for stream errors. const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Stream error:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, }); -
Enviar a requisição
Chame a função <operationName>Advance para enviar a requisição.
Exemplo em TypeScript
// Configure runtime parameters. let runtime = new $Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);Exemplo em Node.js
// Configure runtime parameters. let runtime = new Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
Perguntas frequentes
-
Erro "You are not authorized to perform this operation" ao chamar uma API
-
Erro "triggerUncaughtException Error: getaddrinfo ENOTFOUND" (problema de endpoint)
-
Erro "Cannot read properties of undefined (reading 'getCredential')" ou "InvalidAccessKeyId.NotFound: code: 404"
Para outros erros comuns, consulte FAQ.