Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Integrar o SDK

Última atualização: Aug 29, 2026

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

  1. Faça login no SDK Center e selecione o product correspondente à API que deseja chamar, como o Short Message Service (SMS).

  2. 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).image

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:

Importante

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 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 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 /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.

  • Testar 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 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.

Importante
  • 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.

Nota

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.

Nota

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.

Importante

Sempre trate as exceções — propague, registre ou recupere. Nunca as ignore silenciosamente.

Clique para visualizar o exemplo de código completo

Exemplo de chamada da API SendMessageToGlobe

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

  static async main(): Promise<void> {
    let client = Client.createClient();
    // Create a request object and set the input parameters.
    let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
      to: "<YOUR_VALUE>",
      from: "<YOUR_VALUE>",
      message: "<YOUR_VALUE>",
    });
    let runtime = new $Util.RuntimeOptions({ });
    try {
      // Send the request.
      await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
    } catch (error) {
      // This is for demonstration purposes only. Handle exceptions with care. Do not ignore exceptions in your project.
      // Error message
      console.log(error.message);
      // Diagnostic address
      console.log(error.data["Recommend"]);
    }    
  }
}

Client.main();

Exemplo em Node.js

const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');

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

  static async main() {
    // Create a request object and set the input parameters.
    let client = Client.createClient();
    let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
      to: '<YOUR_VALUE>',
      from: '<YOUR_VALUE>',
      message: '<YOUR_VALUE>',
    });
    let runtime = new Util.RuntimeOptions({ });
    try {
      // Send the request.
      await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
    } catch (error) {
      // This is for demonstration purposes only. Handle exceptions with care. Do not ignore exceptions in your project.
      // Error message
      console.log(error.message);
      // Diagnostic address
      console.log(error.data["Recommend"]);
      Util.default.assertAsString(error.message);
    }    
  }
}

exports.Client = Client;
Client.main();

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.

Importante

Arquivos temporários armazenados no Alibaba Cloud OSS são limpos periodicamente.

  1. Inicializar o cliente de requisição

    Defina tanto regionId quanto endpoint para a mesma região. O regionId determina onde o arquivo temporário do OSS será armazenado. Se você omitir o regionId, 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);
    }
  2. 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,
        });
  3. 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);  

Clique para visualizar o exemplo de código completo

Exemplo em TypeScript

import { default as facebody20191230 } from '@alicloud/facebody20191230';
import * as $facebody20191230 from '@alicloud/facebody20191230';
import * as $OpenApi from '@alicloud/openapi-client';
import * as $Util from '@alicloud/tea-util';
import * as fs from "fs";

export default class Client {
    static 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'],
        });
        config.regionId = 'cn-shanghai';
        config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
        return new facebody20191230(config);
    }

    static async main(): Promise<void> {
        let client = Client.createClient();

        // 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,
        });
        let runtime = new $Util.RuntimeOptions({});
        try {
            // Send the request.
            const res = await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
            console.log(res);
        } catch (error) {
            if (error instanceof Error) {
                console.error('Error message:', error.message);
                const data = (error as any)?.data?.Recommend;
                if (typeof data === 'string') {
                    console.log('Diagnostic suggestion:', data);
                }
            }
        }
    }
}

Client.main();

Exemplo em Node.js

'use strict';
const facebody20191230 = require('@alicloud/facebody20191230');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const fs = require('fs');

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'],
    });
    config.regionId = 'cn-shanghai';
    config.endpoint = 'facebody.cn-shanghai.aliyuncs.com';
    return new facebody20191230.default(config);
  }

  static async main() {
    let client = Client.createClient();
    // 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);
    });
    // Configure request parameters.
    let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({
      imageURLObject: fileStream,
    });
    let runtime = new Util.RuntimeOptions({});
    try {
      // Send the request.
      const res = await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
      console.log(res);
    } catch (error) {
      // This is for demonstration purposes only. Handle exceptions with care. Do not ignore exceptions in your project.
      console.log(error);
    }
  }
}

exports.Client = Client;
Client.main();

Perguntas frequentes

  1. Erro "You are not authorized to perform this operation" ao chamar uma API

    Causa e solução

    Causa: O usuário RAM associado ao seu AccessKey não tem as permissões necessárias para chamar a API.

    Solução: Conceda as permissões de API necessárias ao usuário RAM. Consulte Manage RAM user permissions.

    Por exemplo, se você receber esse erro ao chamar ou SendMessageToGlobe, crie a seguinte política de permissão personalizada e anexe-a ao usuário RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. Erro "triggerUncaughtException Error: getaddrinfo ENOTFOUND" (problema de endpoint)

    Causa e solução

    Causa: O endpoint especificado não é compatível com a operação da OpenAPI chamada.

    Solução: Corrija o endpoint usando Endpoint configuration e tente novamente.

  3. Erro "Cannot read properties of undefined (reading 'getCredential')" ou "InvalidAccessKeyId.NotFound: code: 404"

    Causa e solução

    Causa: O AccessKey não foi passado corretamente.

    Solução: Verifique se o AccessKey está sendo passado corretamente durante a inicialização do cliente. process.env("XXX") lê o valor de XXX das variáveis de ambiente.

Para outros erros comuns, consulte FAQ.