Cuando llama a una operación de OpenAPI, se recomienda integrar el SDK en su proyecto. Usar un SDK simplifica el proceso de desarrollo, permite integrar funciones rápidamente y reduce los costos de mantenimiento. La integración de un SDK de Alibaba Cloud consta de tres pasos principales: importar el SDK de Alibaba Cloud, establecer las credenciales de acceso y usar el SDK. Este tema describe el proceso de integración del SDK en detalle.
Requisitos del entorno
Node.js >= 8.x
Importar el SDK
Inicie sesión en SDK Center y seleccione el producto de la API que desea llamar, como Short Message Service (SMS).
En la página Installation y configure All Languages en TypeScript. A continuación, en la pestaña Quick Start, encontrará las instrucciones de instalación del SDK para Short Message Service (SMS).

Establecer las credenciales de acceso
Para llamar a operaciones de OpenAPI se requieren credenciales de acceso, como AccessKey o un token de Security Token Service (STS) token. Almacene las credenciales en variables de entorno para evitar filtraciones. Para conocer las prácticas recomendadas, consulte Securely use access credentials. Los ejemplos a continuación usan las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Método de configuración en Linux y macOS
Los siguientes ejemplos usan ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET como nombres de variable. Si lo necesita, reemplácelos por sus propios nombres, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.
Ejecute los siguientes comandos export para establecer las variables de entorno:
Las variables que se establecen con export son temporales y solo son válidas para la sesión actual. Para que sean persistentes, agregue el comando export a su archivo de inicio de shell (como ~/.bashrc o ~/.zshrc).
-
Establezca el AccessKey ID:
# Replace yourAccessKeyID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID -
Establezca el AccessKey secret:
# Replace yourAccessKeySecret with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret -
Compruebe la configuración.
Ejecute
echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si se devuelve el valor correcto, la configuración fue exitosa.
Método de configuración en Windows
Usar la interfaz gráfica de usuario (GUI)
-
Procedimiento
A continuación se describe cómo establecer variables de entorno mediante la GUI en Windows 10.
En el escritorio, haga clic derecho en This PC y elija Properties > Advanced system settings > Environment Variables > New en System variables o User variables. Luego, complete la configuración.
Variable
Valor de ejemplo
AccessKey ID
Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_ID
Valor de la variable: yourAccessKeyID
AccessKey secret
Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_SECRET
Valor de la variable: yourAccessKeySecret
-
Pruebe la configuración
Haga clic en Start (o use el atajo de teclado Win+R), haga clic en Run, introduzca
cmdy luego haga clic en OK (o presione Enter) para abrir el símbolo del sistema. Ejecute los comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%yecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.
Usar el 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 /MEl parámetro
/Mindica una variable de entorno del sistema. Puede omitir este parámetro cuando establezca una variable de entorno de usuario. -
Pruebe la configuración
Haga clic en Start (o use el atajo de teclado Win+R), haga clic en Run, introduzca
cmdy luego haga clic en OK (o presione Enter) para abrir el símbolo del sistema. Ejecute los comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%yecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.
Usar Windows PowerShell
En PowerShell, puede establecer nuevas variables de entorno que son 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 para todos los usuarios, debe tener 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 establecer variables de entorno temporales que solo son válidas para 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 los comandos devuelven el AccessKey correcto, la configuración fue exitosa.
Usar el SDK
Este tema proporciona un ejemplo sobre cómo llamar a la operación de API o SendMessageToGlobe de Short Message Service (SMS). Para consultar la referencia de la API de la operación o SendMessageToGlobe, consulte o SendMessageToGlobe.
1. Inicializar el cliente de solicitud
Todas las llamadas a OpenAPI pasan por un cliente de solicitud. Este ejemplo inicializa un cliente con un par de AccessKey. Para conocer otros métodos de inicialización, consulte Manage access credentials.
Los objetos de cliente, como las instancias de Dysmsapi20180501 y , son seguros para hilos. Por lo tanto, se pueden usar en un entorno multihilo sin necesidad de crear una instancia independiente para cada hilo.
Evite crear objetos de cliente repetidamente con
new. Use el patrón singleton para que solo exista una instancia de cliente por credencial y endpoint durante todo el ciclo de vida de la aplicación.
Ejemplo de 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);
}
}
Ejemplo de 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. Crear el objeto de solicitud
Pase los parámetros mediante el objeto de solicitud del SDK, denominado <OpenAPI Name>Request (por ejemplo, SendSmsRequest). Para conocer los detalles de los parámetros, consulte la referencia de la API: SendMessageToGlobe.
Si una API no tiene parámetros de solicitud, omita este paso. Por ejemplo, DescribeCdnSubList no requiere un objeto de solicitud.
Ejemplo de 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>",
});
Ejemplo de 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 la solicitud
Llame a la función <operationName>WithOptions del cliente, donde <operationName> es el nombre de la API en formato camel case. Esta función recibe un objeto de solicitud y parámetros de tiempo de ejecución (timeout, proxy, etc.). Consulte Advanced configurations.
Si una API no tiene parámetros de solicitud, pase únicamente las opciones de tiempo de ejecución. Por ejemplo, DescribeCdnSubList solo requiere parámetros de tiempo de ejecución.
Ejemplo de TypeScript
// Create runtime parameters.
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
Ejemplo de Node.js
// Create runtime parameters.
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
4. Controlar excepciones
El SDK V2.0 de Node.js genera dos tipos de excepciones:
UnretryableError: se genera después de agotar el número máximo de reintentos, generalmente debido a problemas de red. Recupere la última solicitud mediante
err.data.lastRequest.ResponseError: indica un error del lado del servidor que devuelve la API.
Consulte Exception handling.
Siempre controle las excepciones: propáguelas, regístrelas o recupérese de ellas. Nunca las ignore de forma silenciosa.
Haga clic para ver el ejemplo de código completo
Carga de archivos con operaciones Advance
Algunas API (como las de búsqueda de imágenes y Visual Intelligence) no aceptan rutas de archivos locales directamente. Use la operación Advance para cargar archivos mediante un stream. El SDK almacena el archivo temporalmente en un bucket de OSS en la región cn-shanghai, y el servicio lo lee desde ahí. Este ejemplo usa la operación DetectBodyCount de Visual Intelligence API.
Los archivos temporales almacenados en Alibaba Cloud OSS se eliminan periódicamente.
-
Inicialice el cliente de solicitud
Establezca tanto
regionIdcomoendpointen la misma región. El valor deregionIddetermina dónde se almacena el archivo temporal de OSS. Si omiteregionId, la diferencia de región entre el producto y el bucket de OSS provocará tiempos de espera agotados.Ejemplo de 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); }Ejemplo de 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); } -
Cree el objeto de solicitud
Cree un objeto
<OpenAPIName>AdvanceRequestpara pasar el stream del archivo. El nombre del parámetro para el stream del archivo esImageURLObject.Ejemplo de 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, });Ejemplo de 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, }); -
Envíe la solicitud
Llame a la función
<operationName>Advancepara enviar la solicitud.Ejemplo de TypeScript
// Configure runtime parameters. let runtime = new $Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);Ejemplo de Node.js
// Configure runtime parameters. let runtime = new Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
Preguntas frecuentes
-
Error "You are not authorized to perform this operation" al llamar a una API
-
Error "triggerUncaughtException Error: getaddrinfo ENOTFOUND" (problema de endpoint)
-
Error "Cannot read properties of undefined (reading 'getCredential')" o "InvalidAccessKeyId.NotFound: code: 404"
Para otros errores comunes, consulte FAQ.