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
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.
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/clientPanggil 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.
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.
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 |
| options([ 'query' => [ 'key1' => 'value1'] ]) Catatan Untuk menentukan kumpulan pasangan nilai-kunci, tentukan mereka dalam format berikut: 'query' => [ 'key.1' => 'value1','key.2' => 'value2']... |
| 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
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:
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 Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.
Periksa kesalahan terkait pasangan AccessKey dalam kode.
Contoh permintaan kesalahan:
AlibabaCloud::accessKeyClient( getenv('yourAccessKeyID'), getenv('yourAccessKeySecret') )CatatanDalam 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') )