使用CommonRequest進行調用
使用 CommonRequest 進行調用介紹。
當您要調用的某個產品的 API 沒有提供 SDK 時,可以采用泛用型的 API 調用方式(CommonRequest)。使用 CommonRequest 調用方式可實現任意 OpenAPI 接口的調用。
CommonRequest 調用特點
CommonRequest 的特點如下:
輕量:只需 Core 包即可發起調用,無需下載安裝各產品的 SDK。
簡便:無需更新 SDK 即可調用最新發布的 API。
快速迭代。
使用 CommonRequest
阿里云產品的 API 有 RPC 和 RESTful 兩種風格,不同風格的 API 的 CommonRequest 的調用方法也不同。
通常 API 參數中包含 Action 參數的是RPC風格,包含 PathPattern 參數的是 RESTful 風格。一般情況下,每個產品內,所有 API 的調用風格是統一的。每個 API 僅支持特定的一種風格調用,傳入錯誤的標識,可能會調用到其他 API,或收到ApiNotFound
的錯誤信息。
發起一次 CommonRequest 請求,您需要獲取以下幾個參數的值。您可以在文檔中心各產品的API文檔中獲取以下參數的值。此外,部分產品也可以通過OpenAPI 開發者門戶來獲取API的參數信息。
域名(domain):該產品的服務地址。
API版本(version):該API的版本號,格式為 YYYY-MM-DD。
接口信息:要調用的接口名稱。
當調用的 API 為 RPC 風格(大部分阿里云產品 API 為 RPC 風格,如 ECS 和 RDS)時,需要獲取 Action 參數,使用
request.ApiName = "<Action>"
的方式來指定 API 名稱。例如 RunInstances 接口,在發起 CommonRequest 請求時,需要使用
request.ApiName = "RunInstances"
來指定 API 名稱。
當調用的 API 為 RESTful 風格(如容器服務)時,需要獲取 PathPattern 參數,使用
request.PathPattern = "<PathPattern>"
的方式來指定 RESTful 路徑。例如容器服務的查看所有集群實例的 API 的 PathPattern 為
/clusters
,在發起 CommonRequest 請求時,要使用request.PathPattern = "/clusters"
指定 RESTful 路徑。
示例:調用RPC風格的API
以下代碼展示了如何使用 CommonRequest 的方式調用 CDN 的 DescribeCdnService 接口:
<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
try {
$result = AlibabaCloud::rpc()
->product('Cdn')
->version('2014-11-11')
->action('DescribeCdnService')
->method('POST')
->request();
print_r($result->toArray());
} catch (ClientException $exception) {
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}
示例:調用 RESTful(ROA)風格的 API
以下代碼展示了如何使用 CommonRequest 的方式調用容器服務的 DescribeClusterServices 接口:
<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
try {
$result = AlibabaCloud::roa()
->regionId('cn-hangzhou') // 指定請求的地域,不指定則使用客戶端地域、默認地域。
->product('CS') // 指定產品。
->version('2015-12-15') // 指定產品版本。
->action('DescribeClusterServices') // 指定產品接口。
->serviceCode('cs') // 設置 ServiceCode 以備尋址,非必須。
->endpointType('openAPI') // 設置類型,非必須。
->method('GET') // 指定請求方式。
->host('cs.aliyun.com') // 指定域名則不會尋址,如認證方式為 Bearer Token 的服務則需要指定。
->pathPattern('/clusters/[ClusterId]/services') // 指定 ROA 風格路徑規則。
->withClusterId('123456') // 為路徑中參數賦值,方法名:with + 參數。
->request(); // 發起請求并返回結果對象,請求需要放在設置的最后面。
print_r($result->toArray());
} catch (ClientException $exception) {
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
print_r($exception->getErrorMessage());
}