使用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的方式調用ECS的DescribeInstanceStatus接口:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// 構建一個客戶端實例,用于發起請求
IClientProfile profile = DefaultProfile.GetProfile(
// 地域ID
"<your-region-id>",
// 從環境變量獲取RAM賬號的AccessKey ID
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 從環境變量獲取RAM賬號的AccessKey ID
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// 構造請求
CommonRequest request = new CommonRequest();
request.Domain = "ecs.aliyuncs.com";
request.Version = "2014-05-26";
// 因為是 RPC 風格接口,需指定 ApiName(Action)
request.Action = "DescribeInstanceStatus";
request.AddQueryParameters("PageNumber", "1");
request.AddQueryParameters("PageSize", "30");
// 發起請求,并得到 Response
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}
示例:調用RESTful(ROA)風格的API
以下代碼展示了如何使用CommonRequest的方式調用容器服務的查看所有集群實例接口:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// 構建一個 Client,用于發起請求
IClientProfile profile = DefaultProfile.GetProfile(
// 地域ID
"<your-region-id>",
// 從環境變量獲取RAM賬號的AccessKey ID
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 從環境變量獲取RAM賬號的AccessKey ID
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// 構造請求
CommonRequest request = new CommonRequest();
request.Domain = "cs.aliyuncs.com";
request.Version = "2015-12-15";
// 因為是Restful風格接口,需指定 UriPattern
request.UriPattern = "/clusters";
// 發起請求,并得到 Response
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}