PHP 用 Alibaba Cloud SDK V1.0 は、汎用 API 呼び出しをサポートしています。このトピックでは、PHP 用 Alibaba Cloud SDK V1.0 を使用して汎用呼び出しを行う方法について説明します。
特性
軽量:PHP 用 Alibaba Cloud SDK V1.0 を使用すると、各サービスの SDK をインストールする必要なく、Alibaba Cloud SDK のコアライブラリのみをインストールすることで、すべての API 操作を呼び出すことができます。
迅速な反復と互換性:クラウドサービスが SDK を提供していない場合、または SDK が最新の API 操作用に更新されていない場合は、汎用呼び出しを行うことができます。この方法では、SDK の更新を待つことなく、最新の API 操作を呼び出すことができます。
詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。
使用上の注意
汎用呼び出しを行う前に、API バージョン、リクエスト URL、パラメータタイプなど、必要なメタデータを手動で取得して指定します。詳細については、「API メタデータ」をご参照ください。
PHP 用 Alibaba Cloud SDK V1.0 のコアライブラリをインストールする
ターミナルで次のコマンドを実行して、PHP 用 Alibaba Cloud SDK V1.0 のコアライブラリをインストールします。
composer require alibabacloud/clientAPI 操作を呼び出す
リクエストクライアントを初期化する
AlibabaCloud パッケージで、client を作成してリクエストクライアントを初期化し、client を使用して API 操作を呼び出します。この例では、AccessKey ペア を使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報を管理する」をご参照ください。
AccessKey の漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。
use AlibabaCloud\Client\AlibabaCloud;
// getenv は、環境変数から取得した AccessKey ペアを使用してクライアントを初期化することを示します。
AlibabaCloud::accessKeyClient(
getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
->regionId('cn-hangzhou') // リージョン ID を指定します。
->asDefaultClient(); // クライアントをデフォルトクライアントとして指定します。
API 操作情報とリクエストパラメータを構成する
AlibabaCloud パッケージの client を使用して、API 操作の基本情報とリクエストパラメータを構成します。共通のリクエストパラメータの詳細については、「詳細設定」をご参照ください。
request モジュールは、バージョン番号、URL、パラメータタイプなどの API メタデータを標準のリクエスト構成プロセスを通じて有効な HTTP リクエストに変換し、元のレスポンスデータを返します。パラメータの渡し方は、API のスタイルと設計によって決まります。
操作固有のパラメータ
リクエストパラメータの渡し方は、API 操作のメタデータによって決まります。たとえば、DescribeInstanceStatus API 操作は、メタデータで {"name":"RegionId","in":"query",...}} として定義されています。この場合、"in":"query" は、リージョン ID(RegionId)を options([ 'query' => [ 'key1' => 'value1'] ]) で渡す必要があることを示します。
シナリオ | パラメータの渡し方 |
| options([ 'query' => [ 'key1' => 'value1'] ]) 説明 キーと値のペアのコレクションを指定するには、'query' => [ 'key.1' => 'value1','key.2' => 'value2']... の形式で指定します。 |
| options([ 'form_params' => [ 'key1' => 'value1'] ]) 説明 リクエストパラメータが文字列を指定していない場合は、パラメータ値を JSON 文字列に変換し、その文字列をパラメータ値として指定します。 |
// コレクションタイプの場合のクエリパラメータ。
$instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
// 共通パラメータ。
$queryParams = [
'RegionId' => 'cn-hangzhou',
'PageNumber' => 1,
'PageSize' => 30,
];
// コレクションパラメータを InstanceId.1、InstanceId.2 の形式に変換して処理します。
foreach ($instanceIDs as $index => $id) {
$queryKey = 'InstanceId.' . ($index + 1);
$queryParams[$queryKey] = $id;
}
// API 操作の基本情報とリクエストパラメータを構成します。
$result = AlibabaCloud::rpc() // API 操作スタイル。リモートプロシージャコール(RPC)やリソース指向アーキテクチャ(ROA)など。
// 1.API 操作の基本情報を構成します。
->host('ecs.cn-hangzhou.aliyuncs.com')
->product('Ecs') // サービス名。
->version('2014-05-26') // バージョン番号は API リファレンスと同じであることを確認してください。
->action('DescribeInstanceStatus') // API 操作の名前。RPC スタイルの API 操作を呼び出す場合は、action() を構成して API 操作の名前を指定する必要があります。
->method('POST') // リクエストメソッド。有効な値:GET および POST。
->setProtocolType('HTTPS') // リクエストプロトコル。有効な値:HTTP および HTTPS。HTTPS を使用することをお勧めします。
// ->pathPattern() // リソースパス。ROA スタイルの API 操作で必要です。RPC スタイルの API 操作には、このパラメータを構成しないでください。
// 2.リクエストパラメータを構成します。
->options([
// シナリオ 1:クエリパラメータを構成します。
'query' => $queryParams
// シナリオ 2:form_params でリクエストボディを構成します。
// 'form_params' => [
// 'key1' => 'value1',
// 'key2' => 'value2',
// 'key3' => 'value3',
// ],
])
リクエストを開始する
client を使用して、request() 関数を呼び出すことによってリクエストを開始します。
// RPC スタイルの API 操作を呼び出します。
$result = AlibabaCloud::rpc()
->request()
// ROA スタイルの API 操作を呼び出します。
// $result = AlibabaCloud::roa()
// ->request()
// レスポンスがバイトタイプの場合、リクエスト ID とレスポンスパラメータが返されます。
print_r($result->toArray()); サンプルコード
例:RPC スタイルの API 操作を呼び出す
この例では、ECS の DescribeRegions 操作を呼び出して、操作の汎用呼び出しを行う方法を示します。
<?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 は、環境変数から取得した AccessKey ペアを使用してクライアントを初期化することを示します。
AlibabaCloud::accessKeyClient(
getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
->regionId('cn-hangzhou') // リージョン ID を指定します。
->asDefaultClient(); // クライアントをデフォルトクライアントとして指定します。
// コレクションタイプの場合のクエリパラメータを構成します。
$instanceIDs = ["i-bp1axhql4dqXXXXXXXX", "i-bp124uve8zqXXXXXXXX"];
// 共通パラメータ。
$queryParams = [
'RegionId' => 'cn-hangzhou',
'PageNumber' => 1,
'PageSize' => 30,
];
// コレクションパラメータを InstanceId.1、InstanceId.2 の形式に変換して処理します。
foreach ($instanceIDs as $index => $id) {
$queryKey = 'InstanceId.' . ($index + 1);
$queryParams[$queryKey] = $id;
}
try {
$result = AlibabaCloud::rpc()
->method('POST') // リクエストメソッド。
->verify(false) // 証明書認証を無効にします。
->debug(true) // ロギングを有効にします。
->setProtocolType('HTTPS') // プロトコルを構成します。
->host('ecs.cn-hangzhou.aliyuncs.com') // エンドポイントを構成します。
->version('2014-05-26') // バージョン番号は API リファレンスと同じであることを確認してください。
->action('DescribeInstanceStatus') // API 操作名を指定します。
// リクエストパラメータを構成します。
->options([
'query' => $queryParams
])
// リクエストを送信します。
->request();
print_r($result->toArray());
} catch (ClientException | ServerException $e) {
echo $e->getErrorMessage();
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}
}
}
Sample::main();例:RESTful スタイル (ROA スタイル) の API 操作を呼び出す
次のコードは、CommonRequest を使用して Container Service for Kubernetes (ACK) の DescribeClustersV1 操作を呼び出す方法を示しています。
<?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。このパラメータが指定されていない場合は、クライアントのリージョンまたはデフォルトのリージョンが使用されます。
->product('CS') // サービス名。
->version('2015-12-15 ') // サービスバージョン。
->serviceCode('cs') // アドレッシング用のサービスコード。このパラメータはオプションです。
->endpointType('openAPI') // エンドポイントタイプ。このパラメータはオプションです。
->method('GET') // リクエストメソッド。
->host('cs.aliyun.com ') // ドメイン名。このパラメータが指定されている場合、アドレッシングは実行されません。サービスが認証にベアラトークンを使用する場合は、ドメイン名を指定する必要があります。
->pathPattern('/api/v1/clusters') // API 操作の URL。ROA スタイルの API 操作を呼び出すときは、pathPattern() を構成して API 操作の完全な URL を指定する必要があります。API 操作の URL は、API メタデータから取得できます。
->request(); // リクエストを開始し、結果を取得します。このパラメータは、設定の最後に配置する必要があります。
print_r($result->toArray());
} catch (ClientException $exception) {
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}
}
}
Sample::main();FAQ
「Fatal error: Uncaught AlibabaCloud\Client\Exception\ClientException: AccessKey ID cannot be empty in XXX」というエラーメッセージが返された場合はどうすればよいですか?
原因:AccessKey ペアが正しく構成されていません。
解決策:
次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されているかどうかを確認します。
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%有効な AccessKey ペアが返された場合、環境変数は正しく構成されています。AccessKey ペアが返されない場合、または無効な AccessKey ペアが返された場合は、必要に応じて環境変数を構成します。詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。
コードで AccessKey ペアに関連するエラーを確認します。
エラーリクエストの例:
AlibabaCloud::accessKeyClient( getenv('yourAccessKeyID'), getenv('yourAccessKeySecret') )説明上記のエラーリクエストの例では、getenv() の入力値が AccessKey ペアとして使用されています。ただし、この関数は環境変数から値を読み取るために使用されます。マシンで環境変数名を ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET として指定した後、getenv は環境変数から値を読み取ることができます。
成功リクエストの例:
AlibabaCloud::accessKeyClient( getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') )