Alibaba Cloud SDK V1.0 untuk Go mendukung pemanggilan API generik. Topik ini menjelaskan cara melakukan pemanggilan generik menggunakan Alibaba Cloud SDK V1.0 untuk Go.
Karakteristik
Ringan: Anda dapat menggunakan Alibaba Cloud SDK V1.0 untuk Go untuk memanggil semua operasi API hanya dengan menginstal pustaka inti dari Alibaba Cloud SDK, tanpa perlu menginstal SDK untuk setiap layanan.
Iterasi cepat dan kompatibilitas: Jika layanan cloud tidak menyediakan SDK, atau SDK belum diperbarui untuk operasi API terbaru, Anda dapat melakukan pemanggilan generik. Dengan cara ini, Anda dapat memanggil operasi API terbaru tanpa harus menunggu pembaruan SDK.
Untuk informasi lebih lanjut, lihat Pemanggilan Generik dan Spesifik.
Catatan penggunaan
Sebelum melakukan pemanggilan generik, peroleh dan tentukan metadata yang diperlukan secara manual, termasuk versi API, URL permintaan, dan tipe parameter. Untuk informasi lebih lanjut, lihat Metadata API.
Instal pustaka inti Alibaba Cloud SDK V1.0 untuk Go
Jalankan perintah berikut di terminal Anda untuk menginstal pustaka inti Alibaba Cloud SDK V1.0 untuk Go:
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdkPanggil operasi API
Inisialisasi klien permintaan
Dalam paket aliyunsdkcore, buat modul client untuk menginisialisasi klien permintaan, dan gunakan client untuk memanggil operasi API. Dalam contoh ini, sepasang AccessKey digunakan untuk menginisialisasi klien permintaan. Untuk informasi lebih lanjut, lihat Kelola Kredensial Akses.
Untuk mencegah kebocoran AccessKey, Anda dapat mencatat pasangan AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut, lihat Konfigurasi Variabel Lingkungan di Linux, macOS, dan Windows.
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)
// Gunakan sepasang AccessKey untuk langsung menginisialisasi klien permintaan. os.Getenv menunjukkan bahwa ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}Konfigurasikan informasi operasi API dan parameter permintaan
Gunakan CommonRequest untuk mengonfigurasi parameter permintaan umum dan parameter spesifik operasi untuk operasi API. Untuk informasi lebih lanjut tentang parameter permintaan umum, lihat Pengaturan Lanjutan.
Modul CommonRequest digunakan untuk mengonversi metadata API, seperti nomor versi, URL, dan tipe parameter, menjadi permintaan HTTP yang valid melalui proses konfigurasi permintaan standar, lalu mengembalikan data respons asli. Cara parameter dilewatkan ditentukan oleh gaya dan desain API.
Parameter spesifik operasi
Cara parameter permintaan dilewatkan ditentukan oleh metadata operasi API. Sebagai contoh, operasi API DescribeInstanceStatus didefinisikan sebagai {"name":"RegionId","in":"query",...}} dalam metadata. Dalam hal ini, "in":"query" menunjukkan bahwa ID wilayah (RegionId) harus dilewatkan dalam QueryParams["key"] = "value".
Skenario | Cara parameter dilewatkan |
| QueryParams["key"] = "value" Catatan Untuk menentukan satu set pasangan key-value, tentukan mereka dalam format berikut: QueryParams["key.1"] = "value1", QueryParams["key.2"] = "value2",... |
| FormParams["key"] = "value" Catatan Jika parameter permintaan tidak menentukan string, ubah nilai parameter menjadi string JSON dan tentukan string tersebut sebagai nilai parameter. |
// 2. Buat objek CommonRequest dan konfigurasikan informasi dasar serta parameter permintaan operasi API.
request := requests.NewCommonRequest()
// 2.1 Konfigurasikan informasi dasar operasi API
request.Domain = "ecs-cn-hangzhou.aliyuncs.com" // Titik akhir API.
request.Version = "2014-05-26" // Nomor versi API.
request.ApiName = "DescribeInstanceStatus" // Nama operasi API. Saat Anda memanggil operasi API bergaya RPC, Anda harus mengonfigurasi ApiName() untuk menentukan nama operasi API.
request.Method = "POST" // Metode permintaan.
request.Scheme = "https" // Protokol permintaan. Nilai yang valid: HTTP dan HTTPS. Kami sarankan Anda menggunakan HTTPS.
// request.PathPattern = "/" // Pola jalur sumber daya, yang diperlukan oleh operasi API bergaya ROA. Jangan konfigurasikan parameter ini untuk operasi API bergaya RPC.
// 2.2 Konfigurasikan parameter permintaan.
// Skenario 1: Konfigurasikan parameter query dalam format QueryParams["key"] = "value".
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
// Skenario 2: Konfigurasikan parameter body dalam format FormParams["key"] = "value".
// request.FormParams["key1"] = "value1"
// request.FormParams["key2"] = "value2"
// request.FormParams["key3"] = "value3"
Ajukan permintaan
Gunakan client untuk mengajukan permintaan dengan memanggil fungsi ProcessCommonRequest.
// Ajukan permintaan.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
// Parsing konten respons dalam format JSON, termasuk ID permintaan dan parameter respons untuk operasi API.
fmt.Print(response.GetHttpContentString())Kode contoh
Contoh: Panggil operasi API bergaya RPC
Dalam contoh ini, operasi DescribeRegions dari ECS dipanggil untuk menunjukkan cara melakukan pemanggilan generik operasi.
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"
request.Version = "2014-05-26"
request.ApiName = "DescribeInstanceStatus"
request.Method = "POST"
request.Scheme = "HTTPS"
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
request.QueryParams["PageNumber"] = "1"
request.QueryParams["PageSize"] = "30"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
Contoh: Panggil operasi API bergaya RESTful (ROA)
Dalam contoh ini, operasi DescribeClustersV1 dari Container Service for Kubernetes (ACK) dipanggil untuk menunjukkan cara melakukan pemanggilan generik operasi.
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "cs.aliyuncs.com" // Titik akhir operasi API.
request.Version = "2015-12-15" // Nomor versi operasi API.
// Ini adalah API RESTful. Oleh karena itu, bidang PathPattern harus ditentukan.
request.PathPattern = "/api/v1/clusters" // URL operasi API. Saat Anda memanggil operasi API bergaya ROA, Anda harus mengonfigurasi set_uri_pattern() untuk menentukan URL lengkap operasi API. Anda bisa mendapatkan URL operasi API dari metadata API.
request.Method = "GET" // Metode permintaan.
request.Scheme = "https" // Protokol permintaan. Nilai yang valid: HTTP dan HTTPS. Kami sarankan Anda menggunakan HTTPS.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
FAQ
Apa yang dapat saya lakukan jika pesan kesalahan "SDK.ServerError MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied" dikembalikan?
Penyebab: Pasangan AccessKey tidak dikonfigurasi dengan benar.
Solusi:
Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Jika pasangan AccessKey yang valid dikembalikan, variabel lingkungan telah dikonfigurasi dengan benar. Jika tidak ada pasangan AccessKey atau pasangan AccessKey yang tidak valid dikembalikan, konfigurasikan variabel lingkungan sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Konfigurasi Variabel Lingkungan di Linux, macOS, dan Windows.
Periksa kesalahan terkait pasangan AccessKey dalam kode.
Contoh permintaan kesalahan:
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("yourAccessKeyID"), os.Getenv("yourAccessKeySecret")) if err != nil { panic(err) }CatatanDalam contoh permintaan kesalahan sebelumnya, nilai input os.Getenv() digunakan sebagai pasangan AccessKey. Namun, fungsi ini digunakan untuk membaca nilai dari variabel lingkungan. Setelah Anda menentukan nama variabel lingkungan sebagai ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di mesin Anda, os.Getenv dapat membaca nilai dari variabel lingkungan.
Contoh permintaan sukses:
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) if err != nil { panic(err) }