全部产品
Search
文档中心

Alibaba Cloud SDK:Panggilan generik

更新时间:Jun 28, 2025

Alibaba Cloud SDK V1.0 untuk PHP mendukung panggilan API generik. Dokumen ini menjelaskan cara membuat panggilan generik menggunakan Alibaba Cloud SDK V1.0 untuk PHP.

Karakteristik

  1. Ringan: Anda dapat menggunakan Alibaba Cloud SDK V1.0 untuk PHP untuk memanggil semua operasi API hanya dengan menginstal pustaka inti dari Alibaba Cloud SDK, tanpa perlu menginstal SDK untuk setiap layanan.

  2. Iterasi cepat dan kompatibilitas: Jika layanan cloud tidak menyediakan SDK, atau SDK belum diperbarui untuk operasi API terbaru, Anda dapat melakukan panggilan generik. Dengan cara ini, Anda dapat memanggil operasi API terbaru tanpa harus menunggu pembaruan SDK.

Untuk informasi lebih lanjut, lihat Panggilan generik dan spesifik.

Catatan penggunaan

Sebelum membuat panggilan 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 dari Alibaba Cloud SDK V1.0 untuk PHP

Jalankan perintah berikut di terminal Anda untuk menginstal pustaka inti dari Alibaba Cloud SDK V1.0 untuk PHP:

composer require alibabacloud/client

Panggil operasi API

Inisialisasi klien permintaan

Dalam paket AlibabaCloud, buat 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.

use AlibabaCloud\Client\AlibabaCloud;   

   // getenv menunjukkan bahwa pasangan AccessKey yang diperoleh dari variabel lingkungan digunakan untuk menginisialisasi klien.
    AlibabaCloud::accessKeyClient(
         getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
         getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    ->regionId('cn-hangzhou') // Tentukan ID wilayah.
    ->asDefaultClient(); // Tentukan klien sebagai klien default.  
  

Konfigurasikan informasi operasi API dan parameter permintaan

Gunakan client dalam paket AlibabaCloud untuk mengonfigurasi informasi dasar dan parameter permintaan dari operasi API. Untuk informasi lebih lanjut tentang parameter permintaan umum, lihat Pengaturan lanjutan.

Catatan

Modul permintaan 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. Bagaimana parameter dilewatkan ditentukan oleh gaya dan desain API.

Parameter spesifik operasi

Cara parameter permintaan dilewatkan ditentukan oleh metadata dari 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 opsi([ 'query' => [ 'key1' => 'value1'] ]).

Skenario

Bagaimana parameter dilewatkan

"in":"query"

options([ 'query' => [ 'key1' => 'value1'] ])

Catatan

Untuk menentukan kumpulan pasangan nilai-kunci, tentukan mereka dalam format berikut: 'query' => [ 'key.1' => 'value1','key.2' => 'value2']...

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

options([ 'form_params' => [ 'key1' => 'value1'] ])

Catatan

Jika parameter permintaan tidak menentukan string, ubah nilai parameter menjadi string JSON dan tentukan string tersebut sebagai nilai parameter.

        // Parameter query ketika mereka bertipe koleksi.
        $instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
        // Parameter umum.
        $queryParams = [
            'RegionId' => 'cn-hangzhou',
            'PageNumber' => 1,
            'PageSize' => 30,
        ]; 
        // Proses parameter koleksi dengan mengubahnya ke format InstanceId.1, InstanceId.2.
        foreach ($instanceIDs as $index => $id) {
            $queryKey = 'InstanceId.' . ($index + 1);
            $queryParams[$queryKey] = $id;
        }
 // Konfigurasikan informasi dasar dan parameter permintaan dari operasi API.
 $result = AlibabaCloud::rpc() // Gaya operasi API, seperti panggilan prosedur jarak jauh (RPC) dan arsitektur berorientasi sumber daya (ROA). 
                // 1.Konfigurasikan informasi dasar dari operasi API.
                ->host('ecs.cn-hangzhou.aliyuncs.com') 
                ->product('Ecs') // Nama layanan.
                ->version('2014-05-26') // Pastikan nomor versi harus sama dengan yang ada di referensi API.
                ->action('DescribeInstanceStatus') // Nama operasi API. Saat Anda memanggil operasi API bergaya RPC, Anda harus mengonfigurasi action() untuk menentukan nama operasi API.
                ->method('POST') // Metode permintaan. Nilai yang valid: GET dan POST.
                ->setProtocolType('HTTPS') // Protokol permintaan. Nilai yang valid: HTTP dan HTTPS. Kami sarankan Anda menggunakan HTTPS. 
                // ->pathPattern()  // Jalur sumber daya, yang diperlukan oleh operasi API bergaya ROA. Jangan konfigurasikan parameter ini untuk operasi API bergaya RPC. 
                // 2.Konfigurasikan parameter permintaan.
                ->options([
                    // Skenario 1: Konfigurasikan parameter query.
                    'query' => $queryParams
                    
                    // Skenario 2: Konfigurasikan badan permintaan dalam form_params.
                    // 'form_params' => [ 
                    //     'key1' => 'value1',
                    //     'key2' => 'value2',
                    //     'key3' => 'value3',
                    // ],
                ])
  

Ajukan permintaan

Gunakan client untuk mengajukan permintaan dengan memanggil fungsi request().

 // Panggil operasi API bergaya RPC.
 $result = AlibabaCloud::rpc()
           ->request()
 // Panggil operasi API bergaya ROA. 
 // $result = AlibabaCloud::roa() 
 //         ->request()        
 // Jika respons bertipe byte, ID permintaan dan parameter respons dikembalikan.          
 print_r($result->toArray());       

Kode contoh

Contoh: Panggil operasi API bergaya RPC

Dalam contoh ini, operasi DescribeRegions dari ECS dipanggil untuk menunjukkan cara membuat panggilan generik dari suatu operasi.

<?php

namespace AlibabaCloud\SDK\Sample;
require_once 'vendor/autoload.php';
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

class Sample
{   
    public static function main()
    {

    // getenv menunjukkan bahwa pasangan AccessKey yang diperoleh dari variabel lingkungan digunakan untuk menginisialisasi klien.
    AlibabaCloud::accessKeyClient(
         getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
         getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    ->regionId('cn-hangzhou') // Tentukan ID wilayah.
    ->asDefaultClient(); // Tentukan klien sebagai klien default.

        // Konfigurasikan parameter query ketika mereka bertipe koleksi.
        $instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
        // Parameter umum.
        $queryParams = [
            'RegionId' => 'cn-hangzhou',
            'PageNumber' => 1,
            'PageSize' => 30,
        ]; 
        // Proses parameter koleksi dengan mengubahnya ke format InstanceId.1, InstanceId.2.
        foreach ($instanceIDs as $index => $id) {
            $queryKey = 'InstanceId.' . ($index + 1);
            $queryParams[$queryKey] = $id;
        }
        try {
            $result = AlibabaCloud::rpc()
                ->method('POST') // Metode permintaan.
                ->verify(false) // Nonaktifkan otentikasi sertifikasi.
                ->debug(true)  // Aktifkan logging.
                ->setProtocolType('HTTPS') // Konfigurasikan protokol.
                ->host('ecs.cn-hangzhou.aliyuncs.com') // Konfigurasikan titik akhir.
                ->version('2014-05-26') // Pastikan nomor versi harus sama dengan yang ada di referensi API.
                ->action('DescribeInstanceStatus') // Tentukan nama operasi API.
                // Konfigurasikan parameter permintaan.
                ->options([
                    'query' => $queryParams
                ])
                // Kirim permintaan.
                ->request();
            print_r($result->toArray());
        } catch (ClientException | ServerException $e) {
            echo $e->getErrorMessage();
        } catch (ServerException $exception) {
            print_r($exception->getErrorMessage());
        }
}
}

Sample::main();

Contoh: Panggil operasi API bergaya RESTful (ROA)

Kode berikut menunjukkan cara menggunakan CommonRequest untuk memanggil operasi DescribeClustersV1 dari Container Service for Kubernetes (ACK):

<?php
namespace AlibabaCloud\SDK\Sample;
require_once 'vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

class Sample
{
  public static function main()
    {
    try {
        $result = AlibabaCloud::roa()
                          ->regionId('cn-hangzhou) // ID wilayah. Jika parameter ini tidak ditentukan, wilayah klien atau wilayah default digunakan. 
                          ->product('CS') // Nama layanan. 
                          ->version('2015-12-15 ') // Versi layanan. 
                          ->serviceCode('cs') // Kode layanan untuk penargetan. Parameter ini opsional. 
                          ->endpointType('openAPI') // Tipe titik akhir. Parameter ini opsional. 
                          ->method('GET') // Metode permintaan. 
                          ->host('cs.aliyun.com ') // Nama domain. Jika parameter ini ditentukan, penargetan tidak dilakukan. Jika layanan menggunakan token bearer untuk otentikasi, Anda harus menentukan nama domain. 
                          ->pathPattern('/api/v1/clusters') // URL dari operasi API. Saat Anda memanggil operasi API bergaya ROA, Anda harus mengonfigurasi pathPattern() untuk menentukan URL lengkap dari operasi API. Anda dapat memperoleh URL dari operasi API dari metadata API. 
                          ->request(); // Ajukan permintaan dan peroleh hasil. Parameter ini harus berada di akhir pengaturan. 
    print_r($result->toArray());
    } catch (ClientException $exception) {
    print_r($exception->getErrorMessage());
    } catch (ServerException $exception) {
    print_r($exception->getErrorMessage());
}
    }
}
Sample::main();

FAQ

  1. Apa yang dapat saya lakukan jika pesan kesalahan "Fatal error: Uncaught AlibabaCloud\Client\Exception\ClientException: AccessKey ID cannot be empty in XXX" 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 yang tidak valid 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:

      AlibabaCloud::accessKeyClient(
               getenv('yourAccessKeyID'),
               getenv('yourAccessKeySecret')
          )
      Catatan

      Dalam contoh permintaan kesalahan sebelumnya, nilai input 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, getenv dapat membaca nilai dari variabel lingkungan.

      Contoh permintaan berhasil:

      AlibabaCloud::accessKeyClient(
               getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
               getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
          )