すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:汎用呼び出し

最終更新日:Jun 19, 2025

PHP 用 Alibaba Cloud SDK V1.0 は、汎用 API 呼び出しをサポートしています。このトピックでは、PHP 用 Alibaba Cloud SDK V1.0 を使用して汎用呼び出しを行う方法について説明します。

特性

  1. 軽量:PHP 用 Alibaba Cloud SDK V1.0 を使用すると、各サービスの SDK をインストールする必要なく、Alibaba Cloud SDK のコアライブラリのみをインストールすることで、すべての API 操作を呼び出すことができます。

  2. 迅速な反復と互換性:クラウドサービスが SDK を提供していない場合、または SDK が最新の API 操作用に更新されていない場合は、汎用呼び出しを行うことができます。この方法では、SDK の更新を待つことなく、最新の API 操作を呼び出すことができます。

詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。

使用上の注意

汎用呼び出しを行う前に、API バージョン、リクエスト URL、パラメータタイプなど、必要なメタデータを手動で取得して指定します。詳細については、「API メタデータ」をご参照ください。

PHP 用 Alibaba Cloud SDK V1.0 のコアライブラリをインストールする

ターミナルで次のコマンドを実行して、PHP 用 Alibaba Cloud SDK V1.0 のコアライブラリをインストールします。

composer require alibabacloud/client

API 操作を呼び出す

リクエストクライアントを初期化する

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'] ]) で渡す必要があることを示します。

シナリオ

パラメータの渡し方

"in":"query"

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

説明

キーと値のペアのコレクションを指定するには、'query' => [ 'key.1' => 'value1','key.2' => 'value2']... の形式で指定します。

"in":"body" または "in": "formData"

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

  1. 「Fatal error: Uncaught AlibabaCloud\Client\Exception\ClientException: AccessKey ID cannot be empty in XXX」というエラーメッセージが返された場合はどうすればよいですか?

    原因:AccessKey ペアが正しく構成されていません。

    解決策:

    1. 次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されているかどうかを確認します。

      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%

      有効な AccessKey ペアが返された場合、環境変数は正しく構成されています。AccessKey ペアが返されない場合、または無効な AccessKey ペアが返された場合は、必要に応じて環境変数を構成します。詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。

    2. コードで 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')
          )