Untuk mempermudah pemanggilan API, kami menyarankan Anda mengintegrasikan Alibaba Cloud SDK ke dalam proyek Anda. SDK menyederhanakan proses pengembangan, mempercepat integrasi fitur, dan secara signifikan mengurangi biaya operasional dan pemeliharaan (O&M). Untuk mengintegrasikan Alibaba Cloud SDK, lakukan langkah-langkah berikut: instal Alibaba Cloud SDK, konfigurasikan kredensial akses, dan gunakan SDK. Topik ini menjelaskan cara mengintegrasikan Alibaba Cloud SDK.
Prasyarat
Go 1.10.x atau versi yang lebih baru telah diinstal.
Impor SDK.
Masuk ke SDK Center dan pilih layanan yang SDK-nya ingin Anda gunakan. Dalam contoh ini, Short Message Service (SMS) dipilih.
Pada halaman Install, dan untuk All Languages, pilih Go. Kemudian, pada tab Quick Start, Anda dapat menemukan metode instalasi SDK untuk Short Message Service (SMS).

Konfigurasikan kredensial akses
Untuk memanggil operasi API layanan Alibaba Cloud, Anda harus mengonfigurasi kredensial akses, seperti Pasangan Kunci Akses atau Token Layanan Keamanan (STS). Untuk mencegah kebocoran Pasangan Kunci Akses, Anda dapat menyimpannya dalam variabel lingkungan. Untuk informasi lebih lanjut tentang solusi keamanan lainnya, lihat Solusi keamanan kredensial. Dalam contoh ini, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET digunakan untuk menyimpan Pasangan Kunci Akses.
Konfigurasikan variabel lingkungan di Linux dan macOS
Konfigurasikan variabel lingkungan menggunakan perintah export
Variabel lingkungan sementara yang dikonfigurasi menggunakan perintah export hanya berlaku untuk sesi saat ini. Setelah Anda keluar dari sesi, variabel lingkungan tersebut tidak lagi berlaku. Untuk mengonfigurasi variabel lingkungan 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, berarti variabel lingkungan telah dikonfigurasi.
Konfigurasikan variabel lingkungan di Windows
Gunakan GUI
Prosedur
Jika Anda ingin menggunakan antarmuka grafis (GUI) untuk mengonfigurasi variabel lingkungan di Windows 10, lakukan langkah-langkah berikut:
Di desktop Windows, klik kanan This PC dan pilih Properties. Pada halaman yang muncul, klik Advanced system settings. Di kotak dialog System Properties, klik Environment Variables pada tab Advanced. Di kotak dialog Environment Variables, klik New di bagian User variables atau System variables. Lalu, konfigurasikan variabel sesuai dengan tabel berikut.
Variabel
Contoh
AccessKey ID
Nama variabel: ALIBABA_CLOUD_ACCESS_KEY_ID
Nilai variabel: LTAI****************
AccessKey Secret
Nama variabel: ALIBABA_CLOUD_ACCESS_KEY_SECRET
Nilai variabel: yourAccessKeySecret
Periksa apakah konfigurasi berhasil.
Di desktop Windows, klik Start atau tekan Win + R. Di kotak dialog Run, masukkan cmd. Lalu, klik OK atau tekan Enter. Pada jendela Command Prompt yang muncul, jalankan perintah
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%danecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika Pasangan Kunci Akses yang valid dikembalikan, konfigurasi berhasil.
Gunakan CMD
Prosedur
Buka jendela Command Prompt sebagai administrator dan jalankan perintah berikut untuk menambahkan variabel lingkungan ke sistem:
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 menghilangkan parameter ini jika ingin mengonfigurasi variabel lingkungan tingkat pengguna.Periksa apakah konfigurasi berhasil.
Di desktop Windows, klik Start atau tekan Win + R. Di kotak dialog Run, masukkan cmd. Lalu, klik OK atau tekan Enter. Pada jendela Command Prompt yang muncul, jalankan perintah
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%danecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika Pasangan Kunci Akses yang valid dikembalikan, konfigurasi berhasil.
Gunakan Windows PowerShell
Di PowerShell, konfigurasikan variabel lingkungan baru. Variabel ini 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. Perintah berikut harus dijalankan 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 ini 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 Kunci Akses yang valid dikembalikan, konfigurasi berhasil.
Gunakan SDK
Dalam contoh ini, operasi API SendMessageToGlobe dari Short Message Service (SMS) dipanggil. Untuk informasi lebih lanjut tentang SendMessageToGlobe, lihat SendMessageToGlobe.
1. Inisialisasi klien permintaan
Dalam SDK V2.0, semua pemanggilan OpenAPI dimulai melalui klien. Sebelum memanggil operasi OpenAPI, Anda harus menginisialisasi klien tersebut. Anda dapat menginisialisasi klien dengan beberapa cara. Contoh ini menunjukkan cara menginisialisasi klien menggunakan AccessKey. Untuk informasi lebih lanjut tentang metode inisialisasi lainnya, lihat Kelola kredensial akses.
Instans klien bersifat thread-safe dan dapat digunakan di lingkungan multi-threaded. Anda tidak perlu membuat instans terpisah untuk setiap thread.
Dalam proyek pengembangan, kami menyarankan agar Anda tidak sering membuat objek klien. Jika tidak, pemborosan sumber daya dapat meningkat dan performa layanan dapat menurun. Kami menyarankan agar Anda menggunakan satu instans untuk mengenkapsulasi klien. Hal ini memastikan bahwa hanya satu instans Klien yang diinisialisasi untuk kredensial akses dan titik akhir yang sama sepanjang siklus hidup aplikasi.
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{
// Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah disetel.
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel.
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. Buat instans struct Request
Saat meneruskan parameter untuk pemanggilan OpenAPI, Anda harus menggunakan struct Request yang disediakan oleh SDK. Format penamaan untuk struct Request OpenAPI adalah <Nama operasi OpenAPI>Request. Misalnya, struct request untuk operasi `SendSms` adalah `SendSmsRequest`. Untuk informasi lebih lanjut tentang parameter permintaan, lihat dokumentasi API yang sesuai. Untuk dokumentasi API dalam contoh ini, lihat SendMessageToGlobe.
Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu membuat objek request. Misalnya, operasi DescribeCdnSubList tidak mendukung parameter permintaan.
// Buat objek request dan atur parameter input yang diperlukan
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
// Harap ganti dengan nomor penerima yang sebenarnya.
To: tea.String("<YOUR_VALUE>"),
// Harap ganti dengan konten SMS yang sebenarnya.
Message: tea.String("<YOUR_VALUE>"),
}3. Klien memulai permintaan.
Saat menggunakan klien untuk memanggil operasi OpenAPI, kami menyarankan agar Anda menggunakan fungsi <Nama Operasi>WithOptions. Fungsi ini memiliki dua parameter: yang pertama adalah pointer ke struct Request API, dan yang kedua adalah pointer ke struct opsi runtime. Opsi runtime digunakan untuk mengonfigurasi perilaku permintaan, seperti pengaturan timeout dan konfigurasi proxy. Untuk informasi lebih lanjut, lihat Konfigurasi lanjutan.
Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu menentukan objek request dalam permintaan tersebut. Misalnya, Anda hanya perlu menentukan parameter runtime saat memanggil operasi DescribeCdnSubList.
// Anda perlu menambahkan 'util "github.com/alibabacloud-go/tea-utils/v2/service"' ke pernyataan import.
func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
client, _err := CreateClient()
if _err != nil {
return nil, _err
}
// Buat objek request dan atur parameter input yang diperlukan
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
// Harap ganti dengan nomor penerima yang sebenarnya.
To: tea.String("<YOUR_VALUE>"),
// Harap ganti dengan konten SMS yang sebenarnya.
Message: tea.String("<YOUR_VALUE>"),
}
runtime := &util.RuntimeOptions{}
// Salin kode untuk dijalankan, harap cetak nilai kembali API sendiri.
response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
if _err != nil {
return nil, _err
}
return response, _err
}
4. Tangani error
Alibaba Cloud SDK V2.0 untuk Go mengklasifikasikan pengecualian ke dalam jenis-jenis berikut:
error: Jenis pengecualian ini disebabkan oleh kesalahan non-bisnis. Misalnya, error dilemparkan jika verifikasi gagal karena file sumber SDK dimodifikasi atau jika penguraian gagal.
SDKError: Dalam kebanyakan kasus, jenis pengecualian ini disebabkan oleh kesalahan bisnis.
Untuk informasi lebih lanjut tentang cara menangani pengecualian SDK, lihat Penanganan pengecualian.
Kami menyarankan agar Anda menerapkan langkah-langkah penanganan pengecualian yang tepat, seperti melaporkan pengecualian, mencatat log pengecualian, dan melakukan pengulangan, untuk memastikan ketangguhan dan stabilitas sistem Anda.
Untuk informasi lebih lanjut, lihat Kode contoh.
Skenario khusus: Unggah file melalui operasi Advance
Saat menggunakan Image Search atau Visual Intelligence API (VIAPI) untuk memproses citra di mesin lokal atau mengunggah citra, API Image Search atau VIAPI yang dijelaskan dalam dokumentasi tidak mendukung unggahan langsung. Untuk mengunggah citra, 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 tersebut dari OSS bila diperlukan. Wilayah default OSS adalah cn-shanghai. Contoh berikut menunjukkan cara memanggil operasi DetectBodyCount VIAPI:
File sementara di OSS dibersihkan secara berkala.
Inisialisasi klien permintaan
Pastikan bahwa parameter
RegionIddanendpointlayanan cloud keduanya ditentukan.RegionIdmenunjukkan wilayah OSS tempat file sementara disimpan. Jika Anda tidak mengonfigurasi parameterRegionId, layanan cloud mungkin menggunakan wilayah yang berbeda dari OSS, sehingga menyebabkan timeout API.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{ // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah disetel di lingkungan runtime Anda. AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel di lingkungan runtime Anda. AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), } // Titik akhir dan regionId harus disetel ke wilayah yang sama. config.RegionId = tea.String("cn-shanghai") config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com") _result, _err = facebody20191230.NewClient(config) return _result, _err }Buat instans struct AdvanceRequest
Saat mengunggah file lokal, Anda harus menggunakan struct AdvanceRequest yang disediakan oleh SDK untuk meneruskan aliran file. Format penamaan untuk struct AdvanceRequest adalah
<Nama operasi OpenAPI>AdvanceRequest. Untuk menemukan nama parameter untuk meneruskan aliran file, carilah parameter bertipeio.Readerdalam struct AdvanceRequest yang sesuai.// Ganti dengan path file. filePath := `<FILE_PATH>` // Buka file dan buat aliran. file, err := os.Open(filePath) if err != nil { return fmt.Errorf("Gagal membuka file: %v", err) } defer file.Close() // Tutup file. // Buat instans struct AdvanceRequest. detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{ ImageURLObject: file, }Memulai permintaan
Panggil fungsi
<Nama Operasi>Advanceuntuk memulai permintaan. Parameter inputnya adalah pointer ke struct AdvanceRequest.// Anda perlu menambahkan 'util "github.com/alibabacloud-go/tea-utils/v2/service"' ke pernyataan import. func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) { client, _err := CreateClient() if _err != nil { return nil, _err } // Ganti dengan path file. filePath := `<FILE_PATH>` // Buka file dan buat aliran. file, err := os.Open(filePath) if err != nil { return nil, fmt.Errorf("Gagal membuka file: %v", err) } defer file.Close() // Tutup file. // Buat objek request. detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{ ImageURLObject: file, } runtime := &util.RuntimeOptions{} // Memulai permintaan. response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime) if _err != nil { return nil, _err } return response, nil }
FAQ
Bagaimana cara menangani error "You are not authorized to perform this operation" yang dilemparkan oleh operasi API?
Bagaimana cara menangani error "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" yang dilemparkan oleh operasi API?
Bagaimana cara menangani error "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found" yang dilemparkan oleh operasi API?
Untuk informasi lebih lanjut tentang cara menangani error SDK, lihat FAQ.