Alibaba Cloud SDK V1.0 for Java mendukung pemanggilan API generik. Topik ini menjelaskan cara membuat pemanggilan generik menggunakan Alibaba Cloud SDK V1.0 for Java.
Karakteristik
Ringan: Anda dapat menggunakan Alibaba Cloud SDK V1.0 for Java untuk memanggil semua operasi API hanya dengan menginstal
aliyun-python-sdk-core, tanpa perlu menginstal SDK dari 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, secara manual peroleh dan tentukan metadata yang diperlukan, termasuk versi API, URL permintaan, dan tipe parameter. Untuk informasi lebih lanjut, lihat Metadata API.
Instal pustaka inti Alibaba Cloud SDK V1.0 for Java
Tambahkan dependensi berikut ke file pom.xml untuk menginstal pustaka inti Alibaba Cloud SDK V1.0 for Java.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
// Pilih versi.
<version>[(4.0.0,5.0.0)]</version>
</dependency>Panggil operasi API
Inisialisasi klien permintaan
Dalam paket com.aliyuncs, 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 Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
// 1. Buat dan inisialisasi instance DefaultAcsClient
DefaultProfile profile = DefaultProfile.getProfile(
// ID wilayah.
"cn-hangzhou",
// System.getenv menentukan bahwa ID AccessKey dari Pengguna Resource Access Management (RAM) diperoleh dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// System.getenv menentukan bahwa rahasia AccessKey dari pengguna RAM diperoleh dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Opsional. Konfigurasikan HTTPS untuk klien.
HttpClientConfig clientConfig = HttpClientConfig.getDefault();
// // Nonaktifkan autentikasi sertifikat server.
// clientConfig.setIgnoreSSLCerts(true);
// // Tentukan jumlah maksimum koneksi pada setiap host.
// clientConfig.setMaxRequestsPerHost(6);
// // Tentukan periode timeout koneksi.
// clientConfig.setConnectionTimeoutMillis(30000L);
// // Tentukan periode timeout untuk permintaan baca.
// clientConfig.setReadTimeoutMillis(30000L);
// // Tentukan periode timeout untuk permintaan tulis.
// clientConfig.setWriteTimeoutMillis(60000L);
// // Konfigurasikan proxy HTTP.
// clientConfig.setHttpProxy("http://127.0.0.1:9898");
// // Konfigurasikan proxy HTTPS.
// clientConfig.setHttpsProxy("http://user:password@127.0.0.1:8989");
// // Konfigurasikan daftar alamat yang melewati proxy.
// clientConfig.setNoProxy("127.0.0.1,localhost");
profile.setHttpClientConfig(clientConfig);
IAcsClient client = new DefaultAcsClient(profile);
Konfigurasikan informasi dasar dan parameter permintaan operasi API
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, dan kemudian mengembalikan data respons asli. Bagaimana 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 putQueryParameter.
Skenario | Bagaimana parameter dilewatkan |
| putQueryParameter(String key,String value) Catatan Untuk menentukan satu set pasangan nilai-kunci, tentukan mereka dalam format berikut: putQueryParameter("key.1","value1"); putQueryParameter("key.2","value2");... |
| putBodyParameter(String key,String value) Catatan Jika parameter permintaan tidak menentukan string, ubah nilai parameter menjadi string JSON dan tentukan string tersebut sebagai nilai variabel. Contoh: request.putBodyParameter("key",new Gson().toJson(value)); |
Unggah file | setHttpContent(byte[] content,String charset,FormatType formatType) Catatan Tetapkan formatType ke FormatType.RAW. |
// 2. Buat permintaan API dan konfigurasikan parameter permintaan.
// Contoh ini menunjukkan cara membuat permintaan untuk memanggil operasi DescribeInstanceStatus, yang digunakan untuk memperoleh status Elastic Compute Service (ECS).
CommonRequest request = new CommonRequest();
// 2.1 Konfigurasikan parameter permintaan umum.
request.setSysMethod(com.aliyuncs.http.MethodType.POST);
request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com");// Nama domain operasi API.
request.setSysVersion("2014-05-26");// Versi API.
request.setSysAction("DescribeInstanceStatus"); // Nama operasi API. Saat memanggil operasi API bergaya RPC, Anda harus mengonfigurasi SysAction() untuk menentukan nama operasi API.
request.setSysConnectTimeout(30000); // Periode timeout.
request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // Protokol permintaan. Nilai valid: HTTP dan HTTPS. Kami merekomendasikan Anda menggunakan HTTPS.
// request.setSysUriPattern("/"); // Protokol permintaan. Nilai valid: HTTP dan HTTPS. Kami merekomendasikan Anda menggunakan HTTPS. Jangan konfigurasikan parameter ini untuk operasi API bergaya RPC.
// 2.2 Konfigurasikan parameter permintaan spesifik operasi.
// Skenario 1: Tentukan parameter kueri dalam putQueryParameter(string key,string value).
request.putQueryParameter("RegionId", "cn-hangzhou");
List<String> instanceIds = List.of(
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
);
for(int i = 0; i < instanceIds.size(); ++i) {
request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
}
request.putQueryParameter("PageNumber", "1");
request.putQueryParameter("PageSize", "30");
// Skenario 2: Tentukan parameter body dalam putBodyParameter(string key,string value).
// request.putBodyParameter("key1", "value1");
// request.putBodyParameter("key2", "value2");
// request.putBodyParameter("key3", "value3");
// Skenario 3: Untuk mengunggah file, tentukan setHttpContent(byte[] content,String charset,FormatType formatType). Tetapkan formatType ke FormatType.RAW.
// byte[] bodyImg = Files.readAllBytes(Paths.get("<FILE_PATH>")); // Ganti <FILE_PATH> dengan jalur file sebenarnya.
// request.setHttpContent(bodyImg, "UTF-8", FormatType.RAW);
Ajukan permintaan
Gunakan client untuk memanggil metode getCommonResponse.
// Ajukan permintaan.
CommonResponse response = client.getCommonResponse(request);
// Jika respons terhadap metode response.getData() adalah tipe JSON, ID permintaan dan parameter respons dikembalikan.
System.out.println(response.getData());Kode contoh
Contoh: Panggil operasi API bergaya RPC
Dalam contoh ini, operasi DescribeInstanceStatus ECS dipanggil menggunakan CommonRequest.
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.GsonBuilder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class Sample {
public static void main(String[] args) throws ClientException, UnsupportedEncodingException {
// Buat instance DefaultAcsClient dan inisialisasi instance tersebut.
DefaultProfile profile = DefaultProfile.getProfile(
// ID wilayah.
"cn-hangzhou",
// Peroleh ID AccessKey dari Pengguna Resource Access Management (RAM) dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Peroleh rahasia AccessKey dari pengguna RAM dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
// Buat permintaan API dan konfigurasikan parameter.
CommonRequest request = new CommonRequest();
request.setSysMethod(com.aliyuncs.http.MethodType.POST); // Metode permintaan.
request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com"); // Nama domain operasi API.
request.setSysVersion("2014-05-26"); // Versi API.
request.setSysAction("DescribeInstanceStatus"); // Nama operasi API. Saat memanggil operasi API bergaya RPC, Anda harus mengonfigurasi SysAction() untuk menentukan nama operasi API.
request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // Protokol permintaan. Nilai valid: HTTP dan HTTPS. Kami merekomendasikan Anda menggunakan HTTPS.
request.putQueryParameter("RegionId", "cn-hangzhou");
List<String> instanceIds = List.of(
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
);
for(int i = 0; i < instanceIds.size(); ++i) {
request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
}
request.putQueryParameter("PageNumber", "1");
request.putQueryParameter("PageSize", "30");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
// TODO Blok yang dibuat otomatis
e.printStackTrace();
} catch (ClientException e) {
// TODO Blok yang dibuat otomatis
e.printStackTrace();
}
}
}
Contoh: Panggil operasi API bergaya RESTful
Dalam contoh ini, operasi DescribeClustersV1 Container Service for Kubernetes (ACK) dipanggil menggunakan CommonRequest.
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
public static void main(String[] args) {
// Buat instance DefaultAcsClient dan inisialisasi instance tersebut.
DefaultProfile profile = DefaultProfile.getProfile(
// ID wilayah.
"cn-hangzhou",
// Peroleh ID AccessKey dari pengguna RAM dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Peroleh rahasia AccessKey dari pengguna RAM dari variabel lingkungan.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
// Buat permintaan API dan konfigurasikan parameter.
CommonRequest request = new CommonRequest();
request.setSysDomain("cs.aliyuncs.com");// Nama domain.
request.setSysVersion("2015-12-15");// Versi API.
request.setSysUriPattern("/clusters"); // URL operasi API. Saat memanggil operasi API bergaya ROA, Anda harus mengonfigurasi UriPattern() untuk menentukan URL lengkap operasi API. Anda dapat memperoleh URL operasi API dari metadata API.
request.setSysMethod(MethodType.GET);// Metode permintaan.
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
// TODO Blok yang dibuat otomatis
e.printStackTrace();
} catch (ClientException e) {
// TODO Blok yang dibuat otomatis
e.printStackTrace();
}
}
}FAQ
Apa yang dapat saya lakukan jika pesan kesalahan "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 tidak valid yang dikembalikan, konfigurasikan variabel lingkungan sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
Periksa kesalahan terkait pasangan AccessKey dalam kode.
Contoh permintaan kesalahan:
accessKeyId = System.getenv("yourAccessKeyID"), accessKeySecret = System.getenv("yourAccessKeySecret")CatatanDalam contoh permintaan kesalahan sebelumnya, nilai masukan System.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, System.getenv dapat membaca nilai dari variabel lingkungan.
Contoh permintaan sukses:
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
Apa yang dapat saya lakukan jika pesan kesalahan "com.aliyuncs.exceptions.ClientException: MissingParameter : The input parameter "Timestamp" that is mandatory for processing this request is not supplied" dikembalikan?
Penyebab: Parameter
SysUriPatterndikonfigurasi dalam parameter permintaan umum operasi API bergaya RPC.Solusi: Hapus parameter
SysUriPatterndari parameter permintaan umum.