Untuk mempermudah pemanggilan API, disarankan mengintegrasikan proyek Anda dengan Alibaba Cloud SDK. SDK ini menyederhanakan proses pengembangan, mempercepat integrasi fitur, dan mengurangi biaya O&M secara signifikan. Untuk mengintegrasikan dengan Alibaba Cloud SDK, ikuti langkah-langkah berikut: instal SDK, konfigurasikan kredensial akses, dan gunakan SDK. Topik ini menjelaskan cara melakukan integrasi tersebut.
Prasyarat
Versi Node.js harus 8.x atau lebih baru.
Impor SDK.
Masuk ke SDK Center dan pilih layanan yang ingin Anda gunakan SDK-nya. Dalam contoh ini, Short Message Service (SMS) dipilih.
Pada halaman Short Message Service, pilih TypeScript di bagian All languages. Pada tab Quick Start, dapatkan metode instalasi Short Message Service (SMS) SDK.

Konfigurasikan kredensial akses
Untuk memanggil operasi API dari layanan Alibaba Cloud, Anda harus mengonfigurasi kredensial akses seperti Pasangan AccessKey atau Token Layanan Keamanan (STS). Untuk mencegah kebocoran pasangan AccessKey, Anda dapat mencatat pasangan AccessKey dalam variabel lingkungan. Informasi lebih lanjut tentang solusi keamanan lainnya dapat ditemukan di Solusi Keamanan Kredensial. Dalam contoh ini, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET digunakan untuk mencatat pasangan AccessKey.
Konfigurasikan variabel lingkungan di Linux dan macOS
Konfigurasikan variabel lingkungan menggunakan perintah export
Variabel lingkungan sementara yang dikonfigurasi menggunakan perintah export hanya valid untuk sesi saat ini. Setelah keluar dari sesi, variabel lingkungan menjadi tidak valid. Untuk konfigurasi permanen, tambahkan perintah export ke file konfigurasi startup sistem operasi yang sesuai.
Konfigurasikan ID AccessKey dan tekan Enter.
# Ganti <ACCESS_KEY_ID> dengan ID AccessKey Anda. export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyIDKonfigurasikan Rahasia AccessKey dan tekan Enter.
# Ganti <ACCESS_KEY_SECRET> dengan Rahasia AccessKey Anda. export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecretPeriksa apakah konfigurasi berhasil.
Jalankan perintah
echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Jika ID AccessKey yang valid dikembalikan, variabel lingkungan telah dikonfigurasi.
Konfigurasikan variabel lingkungan di Windows
Gunakan GUI
Prosedur
Untuk menggunakan GUI dalam mengonfigurasi variabel lingkungan di Windows 10, ikuti langkah-langkah berikut:
Di desktop Windows, klik kanan PC Ini dan pilih Properti. Di halaman yang muncul, klik Pengaturan Sistem Lanjutan. Di kotak dialog Properti Sistem, klik Variabel Lingkungan pada tab Lanjutan. Di kotak dialog Variabel Lingkungan, klik Baru di bagian Variabel Pengguna atau Variabel Sistem. Kemudian, konfigurasikan variabel yang dijelaskan dalam tabel berikut.
Variabel
Contoh
ID AccessKey
Nama variabel: ALIBABA_CLOUD_ACCESS_KEY_ID
Nilai variabel: LTAI****************
Rahasia AccessKey
Nama variabel: ALIBABA_CLOUD_ACCESS_KEY_SECRET
Nilai variabel: yourAccessKeySecret
Periksa apakah konfigurasi berhasil.
Di desktop Windows, klik Mulai atau tekan Win + R. Di kotak dialog Jalankan, masukkan cmd. Lalu, klik OK atau tekan Enter. Di halaman yang muncul, jalankan perintah
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%danecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.
Gunakan CMD
Prosedur
Buka jendela Command Prompt sebagai administrator dan jalankan perintah berikut untuk menambahkan variabel lingkungan di sistem operasi:
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M/Mmenunjukkan bahwa variabel lingkungan bersifat tingkat sistem. Anda dapat memilih untuk tidak menggunakan parameter ini saat mengonfigurasi variabel lingkungan tingkat pengguna.Periksa apakah konfigurasi berhasil.
Di desktop Windows, klik Mulai atau tekan Win + R. Di kotak dialog Jalankan, masukkan cmd. Lalu, klik OK atau tekan Enter. Di halaman yang muncul, jalankan perintah
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%danecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.
Gunakan Windows PowerShell
Di PowerShell, konfigurasikan variabel lingkungan baru. Variabel lingkungan berlaku untuk semua sesi baru.
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)Konfigurasikan variabel lingkungan untuk semua pengguna. Anda harus menjalankan perintah berikut sebagai administrator.
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)Konfigurasikan variabel lingkungan sementara. Variabel lingkungan hanya berlaku untuk sesi saat ini.
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"Di PowerShell, jalankan perintah Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID dan Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.
Gunakan SDK
Dalam contoh ini, operasi API SendMessageToGlobe dari Short Message Service (SMS) dipanggil. Informasi lebih lanjut tentang SendMessageToGlobe dapat ditemukan di SendMessageToGlobe.
1. Inisialisasi klien permintaan
Di SDK, semua permintaan ke operasi API dikirim melalui klien. Sebelum memanggil operasi API, Anda harus menginisialisasi klien permintaan. Ada beberapa metode untuk menginisialisasi klien permintaan. Dalam contoh ini, pasangan AccessKey digunakan untuk menginisialisasi klien permintaan. Informasi lebih lanjut dapat ditemukan di Kelola Kredensial Akses.
Objek klien, seperti Dysmsapi20180501 instance, aman thread dan dapat digunakan di lingkungan multithread tanpa risiko keamanan. Anda tidak perlu membuat instance untuk setiap thread.
Dalam proyek pengembangan, disarankan untuk tidak sering menggunakan kata kunci baru untuk membuat objek klien. Hal ini dapat meningkatkan pemborosan sumber daya dan menurunkan performa layanan. Disarankan untuk mengenkapsulasi klien dalam mode singleton. Ini memastikan bahwa hanya satu instance Client yang diinisialisasi untuk kredensial akses dan titik akhir yang sama sepanjang siklus hidup aplikasi.
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({
// Diperlukan, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID disetel.
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Diperlukan, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET disetel.
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// Lihat https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501(config);
}
}
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({
// Diperlukan, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID disetel.
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Diperlukan, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET disetel.
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// Lihat https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501.default(config);
}
}
2. Buat objek permintaan
Saat memanggil operasi API untuk melewati parameter, Anda harus menggunakan objek permintaan yang disediakan oleh SDK. Beri nama objek permintaan operasi API dalam format berikut: <Nama Operasi API>Request. Misalnya, objek permintaan operasi SendSms adalah SendSmsRequest. Informasi lebih lanjut tentang parameter dapat ditemukan di referensi API. Untuk informasi lebih lanjut tentang parameter operasi SendMessageToGlobe, lihat SendMessageToGlobe.
Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu membuat objek permintaan. Misalnya, operasi DescribeCdnSubList tidak mendukung parameter permintaan.
TypeScript
// Buat objek permintaan dan atur parameter input yang diperlukan
let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
// Harap ganti dengan nomor penerima aktual.
to: "<YOUR_VALUE>",
// Harap ganti dengan konten SMS aktual.
message: "<YOUR_VALUE>",
});Node.js
// Buat objek permintaan dan atur parameter input yang diperlukan
let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
// Harap ganti dengan nomor penerima aktual.
to: '<YOUR_VALUE>',
// Harap ganti dengan konten SMS aktual.
message: '<YOUR_VALUE>',
});3. Mulai permintaan API
Saat menggunakan klien permintaan untuk memanggil operasi API, disarankan memberi nama fungsi dalam format berikut: <Nama Operasi API>WithOptions. Tentukan <Nama Operasi API> dalam camel case. Fungsi ini berisi dua parameter: objek permintaan dan parameter runtime. Objek permintaan dibuat pada langkah sebelumnya. Parameter runtime digunakan untuk menentukan tindakan permintaan, seperti timeout dan konfigurasi proxy. Informasi lebih lanjut dapat ditemukan di Konfigurasi Lanjutan.
Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu menentukan objek permintaan dalam permintaan. Misalnya, Anda hanya perlu menentukan parameter runtime saat memanggil operasi DescribeCdnSubList.
TypeScript
// Buat parameter runtime.
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// Kirim permintaan.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);Node.js
// Buat parameter runtime.
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// Kirim permintaan.
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);4. Tangani kesalahan
Alibaba Cloud SDK V2.0 untuk Node.js mengklasifikasikan pengecualian ke dalam jenis berikut:
UnretryableError: Dalam banyak kasus, jenis pengecualian ini disebabkan oleh masalah jaringan. UnretryableError dilemparkan jika jumlah percobaan ulang mencapai batas atas. Anda dapat menggunakan
err.data.lastRequestuntuk mendapatkan informasi permintaan saat pengecualian terjadi.ResponseError: Dalam banyak kasus, jenis pengecualian ini disebabkan oleh kesalahan bisnis.
Informasi lebih lanjut tentang cara menangani pengecualian SDK dapat ditemukan di Penanganan Pengecualian.
Disarankan untuk mengambil langkah-langkah penanganan pengecualian yang tepat, seperti melaporkan pengecualian, mencatat pengecualian, dan melakukan percobaan ulang, untuk memastikan ketahanan dan stabilitas sistem Anda.
Klik untuk melihat kode sampel lengkap
Skenario khusus: Unggah file melalui operasi Advance
Saat menggunakan Image Search atau Visual Intelligence API (VIAPI) untuk memproses gambar pada mesin lokal atau mengunggah gambar, API dari Image Search atau VIAPI yang dijelaskan dalam dokumentasi tidak mendukung pengunggahan langsung. Untuk mengunggah gambar, Anda perlu menggunakan operasi Advance, yang mendukung transmisi aliran file. Layanan cloud menyimpan sementara file yang diunggah di Object Storage Service (OSS), dan membaca file sementara dari OSS jika diperlukan. Wilayah OSS default adalah cn-shanghai. Contoh berikut menunjukkan cara memanggil operasi DetectBodyCount dari VIAPI:
File sementara di OSS secara berkala dibersihkan.
Inisialisasi Klien Permintaan
Pastikan bahwa parameter
regionIddanendpointlayanan cloud ditentukan.regionIdmenunjukkan wilayah OSS tempat file sementara disimpan. Jika Anda tidak mengonfigurasi parameterregionId, layanan cloud mungkin menggunakan wilayah yang berbeda dari OSS, yang mengakibatkan timeout API.TypeScript
function createClient(): facebody20191230 { let config = new $OpenApi.Config({ // Diperlukan. Pastikan variabel lingkungan berikut disetel di lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_ID. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Diperlukan. Pastikan variabel lingkungan berikut disetel di lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_SECRET. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Tentukan wilayah yang sama untuk parameter endpoint dan regionId. config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230(config); }Node.js
function createClient() { let config = new OpenApi.Config({ // Diperlukan. Pastikan variabel lingkungan berikut disetel di lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_ID. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Diperlukan. Pastikan variabel lingkungan berikut disetel di lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_SECRET. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Tentukan wilayah yang sama untuk parameter endpoint dan regionId. config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230.default(config); }Buat Objek Permintaan
Buat objek permintaan
<Operasi API>AdvanceRequestuntuk melewati aliran file. Di objek permintaan, atur nama parameter menjadiImageURLObject.TypeScript
// Baca file sebagai aliran fileStream. const filePath = '<FILE_PATH>'; // Ganti nilai dengan jalur file aktual. // Periksa file. if (!fs.existsSync(filePath)) { console.error('File tidak ada:', filePath); return; } // Buat aliran dan dengarkan kesalahan aliran. const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Kesalahan aliran file:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });Node.js
// Baca file sebagai aliran fileStream. const filePath = '<FILE_PATH>'; // Ganti nilai dengan jalur file aktual. // Periksa file. if (!fs.existsSync(filePath)) { console.error('File tidak ada:', filePath); return; } // Buat aliran dan dengarkan kesalahan aliran. const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Kesalahan aliran file:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });Mulai Permintaan
Panggil operasi
<Operasi API>AdvanceRequest.TypeScript
// Konfigurasikan parameter runtime. let runtime = new $Util.RuntimeOptions({ }); let client = Client.createClient(); // Kirim permintaan. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);Node.js
// Konfigurasikan parameter runtime. let runtime = new Util.RuntimeOptions({ }); let client = Client.createClient(); // Kirim permintaan. await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
FAQ
Bagaimana cara menangani kesalahan "Anda tidak memiliki otorisasi untuk melakukan operasi ini" yang dilemparkan oleh operasi API?
Bagaimana cara menangani kesalahan titik akhir "triggerUncaughtException Error: getaddrinfo ENOTFOUND" yang dilemparkan oleh operasi API?
Bagaimana cara menangani kesalahan AccessKey "Cannot read properties of undefined (reading 'getCredential')" atau "InvalidAccessKeyId.NotFound: code: 404" yang dilemparkan oleh operasi API?
Informasi lebih lanjut tentang cara menangani pengecualian SDK dapat ditemukan di FAQ.