全部产品
Search
文档中心

Alibaba Cloud SDK:Pemanggilan generik

更新时间:Jun 28, 2025

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

  1. 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.

  2. 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.

Catatan

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.

Catatan

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

"in":"query"

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");...

"in":"body" atau "in": "formData"

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

  1. 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:

    1. 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_SECRET

      Windows

      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.

    2. Periksa kesalahan terkait pasangan AccessKey dalam kode.

      Contoh permintaan kesalahan:

      accessKeyId = System.getenv("yourAccessKeyID"),
      accessKeySecret = System.getenv("yourAccessKeySecret")
      Catatan

      Dalam 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"),
  2. 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 SysUriPattern dikonfigurasi dalam parameter permintaan umum operasi API bergaya RPC.

    Solusi: Hapus parameter SysUriPattern dari parameter permintaan umum.